{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#导入需要用到的包\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from numpy import *\n",
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "from sklearn import linear_model\n",
    "import statsmodels.api as sm\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "## qlib 包\n",
    "import qlib\n",
    "from qlib.utils import init_instance_by_config\n",
    "from qlib.workflow import R\n",
    "from qlib.workflow.record_temp import SignalRecord\n",
    "\n",
    "import warnings \n",
    "warnings.filterwarnings('ignore') #忽略匹配的警告\n",
    "# matplotlib.rc(\"font\", family='Kaiti')#设置中文字体\n",
    "matplotlib.rcParams['axes.unicode_minus'] = False#正确显示正负号\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Get_hd():\n",
    "\n",
    "    def __init__(self):\n",
    "        self.hd = self.get_hd()\n",
    "\n",
    "    def get_hd(self):\n",
    "        qlib.init(provider_uri='/root/autodl-tmp/Stockformer/SOTA_Model_Comparison/qlib_data/ch_data')\n",
    "\n",
    "        # 数据参数\n",
    "        handler_kwargs = {\n",
    "                \"start_time\": params.qlib_start_date,\n",
    "                \"end_time\": params.qlib_end_date,\n",
    "                \"fit_start_time\": params.qlib_train_dates[0],\n",
    "                \"fit_end_time\": params.qlib_train_dates[1],\n",
    "                \"instruments\": 'all',\n",
    "        }\n",
    "        # 因子生成参数\n",
    "        handler_conf = {\n",
    "            \"class\": \"Alpha360\",\n",
    "            \"module_path\": \"qlib.contrib.data.handler\",\n",
    "            \"kwargs\": handler_kwargs,\n",
    "        }\n",
    "        hd = init_instance_by_config(handler_conf)\n",
    "\n",
    "        return hd\n",
    "    \n",
    "class Get_Models_pre():\n",
    "    \n",
    "    def __init__(self,hd):\n",
    "        self.hd = hd\n",
    "        self.dataset_conf = {\n",
    "        \"class\": \"DatasetH\",\n",
    "        \"module_path\": \"qlib.data.dataset\",\n",
    "        \"kwargs\": {\n",
    "            \"handler\": self.hd,\n",
    "            \"segments\": {\n",
    "                \"train\": params.qlib_train_dates,\n",
    "                \"valid\": params.qlib_valid_dates,\n",
    "                \"test\": params.qlib_test_dates,\n",
    "            },\n",
    "        },\n",
    "        }\n",
    "        self.dataset = init_instance_by_config(self.dataset_conf)\n",
    "\n",
    "    def experiment_run(self,NAME,model):\n",
    "\n",
    "        with R.start(experiment_name=NAME):\n",
    "            model.fit(self.dataset)\n",
    "            R.save_objects(trained_model=model)\n",
    "\n",
    "            rec = R.get_recorder()\n",
    "            rid = rec.id # save the record id\n",
    "\n",
    "            # Inference and saving signal\n",
    "            sr = SignalRecord(model, self.dataset, rec)\n",
    "            sr.generate()\n",
    "        recorder = R.get_recorder(recorder_id=rid, experiment_name=NAME)\n",
    "        pred_df = recorder.load_object(\"pred.pkl\")\n",
    "        \n",
    "        return pred_df\n",
    "    \n",
    "    ## 1 lgb\n",
    "    def get_lgb(self):\n",
    "\n",
    "        NAME = 'lgb'\n",
    "        model = init_instance_by_config({\n",
    "        \"class\": \"LGBModel\",\n",
    "        \"module_path\": \"qlib.contrib.model.gbdt\",\n",
    "        \"kwargs\": {\n",
    "            \"d_feat\": 360,\n",
    "            \"lr\": 1e-4\n",
    "        },\n",
    "        })\n",
    "        pred_df = self.experiment_run(NAME,model)\n",
    "        return pred_df\n",
    "    \n",
    "    ## 2 catboost\n",
    "    def get_catboost(self):\n",
    "\n",
    "        NAME = 'catboost'\n",
    "\n",
    "        model = init_instance_by_config({\n",
    "                \"class\": \"CatBoostModel\",\n",
    "                \"module_path\": \"qlib.contrib.model.catboost_model\",\n",
    "                \"kwargs\": {\n",
    "                    # \"d_feat\": 360,\n",
    "                    # \"lr\": 1e-4\n",
    "                },\n",
    "        })\n",
    "\n",
    "        pred_df = self.experiment_run(NAME,model)\n",
    "        return pred_df\n",
    "    \n",
    "    ## 3 XGB\n",
    "    def get_xgb(self):\n",
    "\n",
    "        NAME = 'xgb'\n",
    "\n",
    "        model = init_instance_by_config({\n",
    "                \"class\": \"XGBModel\",\n",
    "                \"module_path\": \"qlib.contrib.model.xgboost\",\n",
    "                \"kwargs\": {\n",
    "                    # \"d_feat\": 360,\n",
    "                    # \"lr\": 1e-4\n",
    "                },\n",
    "        })\n",
    "\n",
    "        pred_df = self.experiment_run(NAME,model)\n",
    "        return pred_df\n",
    "    \n",
    "    ## 4 tcn\n",
    "    def get_tcn(self):\n",
    "\n",
    "        NAME = 'tcn'\n",
    "\n",
    "        model = init_instance_by_config({\n",
    "                \"class\": \"TCN\",\n",
    "                \"module_path\": \"qlib.contrib.model.pytorch_tcn\",\n",
    "                \"kwargs\": {\n",
    "                    \"d_feat\": 360,\n",
    "                    \"lr\": 1e-4,\n",
    "                    \"seed\": 1,\n",
    "                },\n",
    "        })\n",
    "\n",
    "        pred_df = self.experiment_run(NAME,model)\n",
    "        return pred_df\n",
    "\n",
    "    ## 5 lstm \n",
    "    def get_lstm(self):\n",
    "\n",
    "        NAME = 'lstm'\n",
    "\n",
    "        model = init_instance_by_config({\n",
    "                \"class\": \"LSTM\",\n",
    "                \"module_path\": \"qlib.contrib.model.pytorch_lstm\",\n",
    "                \"kwargs\": {\n",
    "                    \"d_feat\": 360,\n",
    "                    \"lr\": 1e-4,\n",
    "                    \"seed\": 1,\n",
    "                },\n",
    "        })\n",
    "\n",
    "        pred_df = self.experiment_run(NAME,model)\n",
    "        return pred_df\n",
    "    \n",
    "    ## 6 localformer\n",
    "    def get_localformer(self):\n",
    "\n",
    "        NAME = 'localformer'\n",
    "\n",
    "        model = init_instance_by_config({\n",
    "                \"class\": \"LocalformerModel\",\n",
    "                \"module_path\": \"qlib.contrib.model.pytorch_localformer\",\n",
    "                \"kwargs\": {\n",
    "                    \"d_feat\": 360,\n",
    "                    \"lr\": 1e-4,\n",
    "                    \"seed\": 1,\n",
    "                },\n",
    "        })\n",
    "\n",
    "        pred_df = self.experiment_run(NAME,model)\n",
    "        return pred_df\n",
    "\n",
    "    ## 7 gru\n",
    "    def get_gru(self):\n",
    "\n",
    "        NAME = 'gru'\n",
    "\n",
    "        model = init_instance_by_config({\n",
    "                \"class\": \"GRU\",\n",
    "                \"module_path\": \"qlib.contrib.model.pytorch_gru\",\n",
    "                \"kwargs\": {\n",
    "                    \"d_feat\": 360,\n",
    "                    \"lr\": 1e-4,\n",
    "                    \"seed\": 1,\n",
    "                },\n",
    "        })\n",
    "\n",
    "        pred_df = self.experiment_run(NAME,model)\n",
    "        return pred_df\n",
    "\n",
    "    ## 8 transformer\n",
    "    def get_transformer(self):\n",
    "\n",
    "        NAME = 'transformer'\n",
    "\n",
    "        model = init_instance_by_config({\n",
    "                \"class\": \"TransformerModel\",\n",
    "                \"module_path\": \"qlib.contrib.model.pytorch_transformer\",\n",
    "                \"kwargs\": {\n",
    "                    \"d_feat\": 360,\n",
    "                    \"lr\": 1e-4,\n",
    "                    \"seed\": 1,\n",
    "                },\n",
    "        })\n",
    "\n",
    "        pred_df = self.experiment_run(NAME,model)\n",
    "        return pred_df\n",
    "    \n",
    "    ## 9 alstm\n",
    "    def get_alstm(self):\n",
    "        \n",
    "        NAME = 'alstm'\n",
    "        \n",
    "        model = init_instance_by_config({\n",
    "                \"class\": \"ALSTM\",\n",
    "                \"module_path\": \"qlib.contrib.model.pytorch_alstm\",\n",
    "                \"kwargs\": {\n",
    "                    \"d_feat\": 360,\n",
    "                    \"lr\": 1e-4,\n",
    "                    \"seed\": 1,\n",
    "                },\n",
    "        })\n",
    "        \n",
    "        pred_df = self.experiment_run(NAME,model)\n",
    "        return pred_df\n",
    "    \n",
    "    ## 10 GATS\n",
    "    def get_gats(self):\n",
    "        \n",
    "        NAME = 'gats'\n",
    "        \n",
    "        model = init_instance_by_config({\n",
    "                \"class\": \"GATs\",\n",
    "                \"module_path\": \"qlib.contrib.model.pytorch_gats\",\n",
    "                \"kwargs\": {\n",
    "                    \"d_feat\": 360,\n",
    "                    \"lr\": 1e-4,\n",
    "                    \"seed\": 1,\n",
    "                },\n",
    "        })\n",
    "        \n",
    "        pred_df = self.experiment_run(NAME,model)\n",
    "        return pred_df\n",
    "\n",
    "class Get_Data():\n",
    "\n",
    "    def __init__(self,params,df_close,df_factor):\n",
    "       \n",
    "        # 获取因子\n",
    "        self.factor = df_factor\n",
    "\n",
    "        self.params = params\n",
    "        self.close = df_close #获取收盘价\n",
    "        self.close_pre = self.close.shift(1) #获取前一日收盘价\n",
    "        \n",
    "\n",
    "        # 计算收益率序列\n",
    "        self.Return = (self.close - self.close_pre) / self.close_pre\n",
    "\n",
    "        # 截取开始与终止回测时间\n",
    "        self.close = self.close.loc[pd.to_datetime(self.params.start_date):pd.to_datetime(self.params.end_date)]#截取回测时期内收盘价数据\n",
    "        self.close_pre = self.close_pre.loc[pd.to_datetime(self.params.start_date):pd.to_datetime(self.params.end_date)]\n",
    "        self.Return = self.Return.loc[pd.to_datetime(self.params.start_date):pd.to_datetime(self.params.end_date)]\n",
    "        self.factor = self.factor.loc[pd.to_datetime(self.params.start_date):pd.to_datetime(self.params.end_date)]\n",
    "\n",
    "        # 获取全部交易日\n",
    "        self.all_dates = self.close.index.strftime('%Y-%m-%d').tolist()\n",
    "        # 获取股票代码\n",
    "        self.all_codes = self.factor.columns.tolist()\n",
    "        # 获取全部换仓日\n",
    "        self.all_trade_dates = self.factor.index.strftime('%Y-%m-%d').tolist()\n",
    "\n",
    "        # # 计算月初交易日换仓日序列\n",
    "        # self.all_trade_dates = pd.DataFrame({'TradeDates':self.all_dates},index=self.all_dates)\n",
    "        # self.all_trade_dates['Month'] = pd.to_datetime(self.all_trade_dates['TradeDates']).dt.strftime('%Y-%m')\n",
    "        # self.all_trade_dates = self.all_trade_dates.groupby('Month')['TradeDates'].first().reset_index()['TradeDates'].tolist()\n",
    "        # self.all_trade_dates = self.all_trade_dates[1:]  # 第一个月初始化持仓即可 不需要换仓\n",
    "\n",
    "\n",
    "\n",
    "# 回测框架\n",
    "class Backtest():\n",
    "    \n",
    "    # 初始化\n",
    "    def __init__(self, params, gn_data):\n",
    "        \n",
    "        # 参数\n",
    "        self.params = params\n",
    "        \n",
    "        # 回测参数\n",
    "        self.fee = self.params.fee\n",
    "        \n",
    "        # 传入数据\n",
    "        self.close = gn_data.close[gn_data.factor.columns]\n",
    "        self.all_dates = gn_data.all_dates\n",
    "        self.all_codes = gn_data.all_codes\n",
    "        self.all_trade_dates = gn_data.all_trade_dates\n",
    "        \n",
    "        # 因子标的\n",
    "        self.factor = gn_data.factor.T\n",
    "\n",
    "        # 进行回测\n",
    "        self.layer_backtest = self.Backtest()\n",
    "\n",
    "    # 实际回测\n",
    "    def Backtest(self):\n",
    "        \n",
    "        # 初始化净值结果矩阵\n",
    "        self.layer_backtest = pd.DataFrame()\n",
    "        self.turnover = pd.DataFrame()\n",
    "\n",
    "\n",
    "        # 换仓日在所有交易日序列中的index\n",
    "        id_dates_trade = [i_date for i_date,date in enumerate(self.all_dates) if date in self.all_trade_dates]\n",
    "\n",
    "        # 开始回测到第一个换仓日前，由于没有交易信号，全部置为0\n",
    "        value_daily = pd.Series(0, index=self.all_dates)\n",
    "        value_daily.iloc[:id_dates_trade[0]+1] = 1 \n",
    "\n",
    "        # 初始化因子权重，长度为所有股票数量\n",
    "        weight_last = pd.Series(0, index=self.factor.index)\n",
    "\n",
    "        # 初始化换手率（计算手续费）index为换仓日期\n",
    "        turnover = pd.Series(0, index=self.all_trade_dates)\n",
    "\n",
    "        # 收益率\n",
    "        Return = pd.Series(0, index=self.all_trade_dates)\n",
    "\n",
    "        # 实际权重\n",
    "        # 行为所有股票，列为换仓日\n",
    "        real_weight = pd.DataFrame(index=self.factor.index, columns=self.factor.columns)\n",
    "        k = self.params.k\n",
    "        for date in self.factor.columns:\n",
    "            # 找到当前列中因子值最大的前10个股票的索引\n",
    "            top_k_indices = self.factor[date].nlargest(k).index\n",
    "            real_weight.loc[top_k_indices, date] = 1 / k\n",
    "            real_weight[date] = real_weight[date].fillna(0)\n",
    "  \n",
    "\n",
    "        # 对交易日进行循环                                \n",
    "        # 这里的id_dates_trade是换仓日在全部交易日中的index序列\n",
    "        # i_date_trade代表这是换仓日序列中第几个换仓日 id_date_trade代表这个换仓日是交易日中第几个交易日\n",
    "        # 都是index索引 不牵涉具体日期的值\n",
    "        for i_date_trade, id_date_trade in enumerate(id_dates_trade): \n",
    "            # id_dates_trade例[20, 41, 64, 84, 101, 123]\n",
    "            # i_dates_trade 如[0, 1, 2, 3, 4, 5]\n",
    "\n",
    "            # ———————————————调仓设置（只调仓+记录，不更新净值）—————————————————\n",
    "            \n",
    "            # 记录上个月月末的权重和这个月月初的买入价\n",
    "            # 月度  当前换仓日的weight序列，index为all_codes\n",
    "            weight_now = real_weight.iloc[:, i_date_trade]\n",
    "            # 日度 换仓日close序列, index为all_codes  \n",
    "            price_buy = self.close.T.iloc[:, id_date_trade] \n",
    "\n",
    "            # 记录当前基准value的值（是上一个月末延续下来的净值日，应该记录）\n",
    "            value_port = value_daily.iloc[id_date_trade]  # todo\n",
    "\n",
    "            # 记录换手率（双边换手率）\n",
    "            turnover.iloc[i_date_trade] = sum(abs(weight_now.values - weight_last.values))\n",
    "            value_port = value_port * (1 - turnover.iloc[i_date_trade] * self.fee)  # 扣交易费用\n",
    "\n",
    "            # ——————————————换仓周期日度净值更新（只更新净值，不调仓）—————————————————\n",
    "\n",
    "            if id_date_trade < id_dates_trade[-1]:\n",
    "                # 净值日为换仓日至下一个换仓日\n",
    "                # 换仓日的下一日 至 下一个换仓日之间的all_codes的索引\n",
    "                # 若i_date_trade=1, id_date_trade=1, 则id_dates_value=[2]\n",
    "                id_dates_value = list(range(id_date_trade+1, id_dates_trade[i_date_trade + 1] + 1))\n",
    "            # 如果是最后一个换仓日\n",
    "            elif id_date_trade == id_dates_trade[-1]:\n",
    "                # 净值日为换仓日至回测终止日\n",
    "                id_dates_value = list(range(id_date_trade+1, len(self.all_dates)))\n",
    "            else:\n",
    "                id_dates_value = []\n",
    "\n",
    "            # 计算每日净值\n",
    "            for id_date_value in id_dates_value:\n",
    "                # for i in [2]\n",
    "\n",
    "                # 记录后复权价\n",
    "                # 当前日收盘价，index为all_codes\n",
    "                price_value = self.close.T.iloc[:, id_date_value]\n",
    "\n",
    "                # 现在的实际权重等于上个月的月末权重 * 月底调仓买入价 / 月初调仓卖出价\n",
    "                weight_last = (weight_now * price_value / price_buy).fillna(0)\n",
    "\n",
    "                # 计算收益率\n",
    "                returns_port = np.nansum(weight_now * (price_value / price_buy - 1))     #收益=sum（上月末权重*（收盘价/买入价-1）） \n",
    "                Return.iloc[id_date_value] = returns_port\n",
    "\n",
    "                # 计算净值；若为当期换仓日的最后一个净值日，则此净值为下期换仓日计算净值的基准\n",
    "                value_daily.iloc[id_date_value] = value_port * (1 + returns_port)  #当期净值=上期净值*（1+收益）\n",
    "\n",
    "                if self.params.if_print:\n",
    "                    # 输出日志\n",
    "                    print('{}  收益{:.2%}，累计净值{:.4}'.format(self.all_dates[id_date_value],\n",
    "                                                    returns_port,\n",
    "                                                    value_daily.iloc[id_date_value]))\n",
    "\n",
    "        # 输出结果\n",
    "        # 保存净值曲线，换手率等指标\n",
    "        self.layer_backtest['净值'] = value_daily.dropna()\n",
    "        self.layer_backtest['换手率'] = turnover.dropna()\n",
    "        self.layer_backtest['收益率'] = Return.dropna()\n",
    "        self.layer_backtest.index = pd.to_datetime(self.layer_backtest.index)\n",
    "        \n",
    "        # 输出结果\n",
    "        return self.layer_backtest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Params():\n",
    "    ## 数据导入参数\n",
    "    # 基本参数\n",
    "    ### 14. '2021-06-04_2024-01-30'\n",
    "    qlib_start_date = '2021-06-04'\n",
    "    qlib_end_date = '2024-01-30'\n",
    "    qlib_train_dates = (\"2021-06-04\", \"2023-06-05\")\n",
    "    qlib_valid_dates = (\"2023-06-06\", \"2023-11-06\")\n",
    "    qlib_test_dates = (\"2023-11-07\", \"2024-01-30\")\n",
    "    \n",
    "    # 动态生成路径中的日期部分\n",
    "    @property\n",
    "    def multitask_output_path(self):\n",
    "        return f'/root/autodl-tmp/Stockformer/Stockformer_run/Stockformer_code/output/Multitask_output_{self.qlib_start_date}_{self.qlib_end_date}'\n",
    "\n",
    "    close_path = '/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze/backtest_data/18-24标准数据.csv'  # 收盘价\n",
    "    hs300_path = '/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze/backtest_data/沪深300_close.csv'  # 沪深300指数\n",
    "    \n",
    "    @property\n",
    "    def reg_pre_path(self):\n",
    "        return f'{self.multitask_output_path}/regression/regression_pred_with_index_fill_-1e9.csv'  # 回归预测结果\n",
    "    \n",
    "    # 返回第一种分类结果路径\n",
    "    @property\n",
    "    def cla_pre_path_with_index(self):\n",
    "        return f'{self.multitask_output_path}/classification/classification_pred_with_index.csv'\n",
    "\n",
    "    # 返回第二种分类结果路径\n",
    "    @property\n",
    "    def cla_pre_path_prob_fill_0(self):\n",
    "        return f'{self.multitask_output_path}/classification/classification_pred_prob_fill_0.csv'\n",
    "\n",
    "\n",
    "    ## 对比模型\n",
    "    if_lgb = True\n",
    "    if_xgb = True\n",
    "    if_catboost = True\n",
    "    if_tcn = True\n",
    "    if_lstm = True\n",
    "    if_localformer = True\n",
    "    if_gru = True\n",
    "    if_transformer = True\n",
    "    if_alstm = True\n",
    "    if_gats = True\n",
    "\n",
    "    ## 回测参数\n",
    "    @property\n",
    "    def start_date(self):\n",
    "        return self.qlib_test_dates[0]  # 回测开始时间\n",
    "\n",
    "    @property\n",
    "    def end_date(self):\n",
    "        return self.qlib_test_dates[1]  # 回测结束时间\n",
    "    \n",
    "    fee = 0.00  # 交易费用\n",
    "    k = 10  # 策略选股数量\n",
    "    if_print = False  # 打印回测日志"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#### 1.导入回测数据\n",
    "\n",
    "# 加载参数\n",
    "params = Params()\n",
    "\n",
    "# 收盘价\n",
    "df = pd.read_csv(params.close_path,index_col=0)\n",
    "df['date'] = pd.to_datetime(df['date'])\n",
    "df_close = df.pivot(index='date', columns='code', values='close')\n",
    "\n",
    "# hs300指数\n",
    "hs300 = pd.read_csv(params.hs300_path)\n",
    "hs300['date'] = pd.to_datetime(hs300['date'])\n",
    "hs300.set_index(['date'],inplace=True)\n",
    "hs300 = hs300.sort_index(ascending=True)\n",
    "hs300  = hs300.rename_axis(None)\n",
    "hs300 = hs300.loc[pd.to_datetime(params.start_date):pd.to_datetime(params.end_date)]\n",
    "# 计算每天的收益率\n",
    "hs300['daily_return'] = hs300['close'].pct_change()\n",
    "# 计算每天的累计收益率\n",
    "hs300['cumulative_return'] = (1 + hs300['daily_return']).cumprod()\n",
    "# 将第一天的累计收益率设为1\n",
    "hs300.loc[hs300.index[0], 'cumulative_return'] = 1\n",
    "\n",
    "# 论文模型\n",
    "### 返回第一种分类结果\n",
    "df_cla = pd.read_csv(params.cla_pre_path_with_index)\n",
    "df_cla['datetime'] = pd.to_datetime(df_cla['datetime'])\n",
    "df_cla.set_index(['datetime'],inplace=True)\n",
    "\n",
    "### 返回第二种分类结果\n",
    "df_cla_prob = pd.read_csv(params.cla_pre_path_prob_fill_0)\n",
    "df_cla_prob['datetime'] = pd.to_datetime(df_cla_prob['datetime'])\n",
    "df_cla_prob.set_index(['datetime'],inplace=True)\n",
    "\n",
    "df_reg_prob = pd.read_csv(params.reg_pre_path)\n",
    "df_reg_prob['datetime'] = pd.to_datetime(df_reg_prob['datetime'])\n",
    "df_reg_prob.set_index(['datetime'],inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# df = pd.read_csv('../data/LABEL_Alpha_158.csv')\n",
    "# df['datetime'] = pd.to_datetime(df['datetime'])\n",
    "# df_reg_prob.columns = df.columns[1:]\n",
    "# df_reg_prob.index = df['datetime'][(df['datetime']>=pd.to_datetime('2023-07-07'))].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[15869:MainThread](2024-05-08 16:20:16,406) INFO - qlib.Initialization - [config.py:416] - default_conf: client.\n",
      "[15869:MainThread](2024-05-08 16:20:16,419) INFO - qlib.Initialization - [__init__.py:74] - qlib successfully initialized based on client settings.\n",
      "[15869:MainThread](2024-05-08 16:20:16,422) INFO - qlib.Initialization - [__init__.py:76] - data_path={'__DEFAULT_FREQ': PosixPath('/root/autodl-tmp/Stockformer/SOTA_Model_Comparison/qlib_data/ch_data')}\n",
      "[15869:MainThread](2024-05-08 16:20:50,874) INFO - qlib.timer - [log.py:127] - Time cost: 34.446s | Loading data Done\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "/root/miniconda3/lib/python3.8/site-packages/qlib/utils/paral.py:54: FutureWarning: Not prepending group keys to the result index of transform-like apply. In the future, the group keys will be included in the index, regardless of whether the applied function returns a like-indexed object.\n",
      "To preserve the previous behavior, use\n",
      "\n",
      "\t>>> .groupby(..., group_keys=False)\n",
      "\n",
      "To adopt the future behavior and silence this warning, use \n",
      "\n",
      "\t>>> .groupby(..., group_keys=True)\n",
      "  return df.groupby(axis=axis, level=level).apply(apply_func)\n",
      "[15869:MainThread](2024-05-08 16:21:08,696) INFO - qlib.timer - [log.py:127] - Time cost: 17.426s | ProcessInf Done\n",
      "[15869:MainThread](2024-05-08 16:21:43,577) INFO - qlib.timer - [log.py:127] - Time cost: 34.878s | ZScoreNorm Done\n",
      "[15869:MainThread](2024-05-08 16:21:44,909) INFO - qlib.timer - [log.py:127] - Time cost: 1.327s | Fillna Done\n",
      "[15869:MainThread](2024-05-08 16:21:45,419) INFO - qlib.timer - [log.py:127] - Time cost: 0.251s | DropnaLabel Done\n",
      "[15869:MainThread](2024-05-08 16:21:46,429) INFO - qlib.timer - [log.py:127] - Time cost: 1.008s | CSZScoreNorm Done\n",
      "[15869:MainThread](2024-05-08 16:21:46,465) INFO - qlib.timer - [log.py:127] - Time cost: 55.588s | fit & process data Done\n",
      "[15869:MainThread](2024-05-08 16:21:46,467) INFO - qlib.timer - [log.py:127] - Time cost: 90.040s | Init data Done\n",
      "[15869:MainThread](2024-05-08 16:21:47,159) INFO - qlib.workflow - [exp.py:258] - Experiment 1 starts running ...\n",
      "[15869:MainThread](2024-05-08 16:21:47,607) INFO - qlib.workflow - [recorder.py:341] - Recorder a6efacabf6e343efaafae9a6d0d56831 starts running under Experiment 1 ...\n",
      "warning: Not a git repository. Use --no-index to compare two paths outside a working tree\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:21:47,740) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff.\n",
      "fatal: not a git repository (or any parent up to mount point /root)\n",
      "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n",
      "[15869:MainThread](2024-05-08 16:21:47,883) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git status.\n",
      "error: unknown option `cached'\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:21:48,025) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff --cached.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training until validation scores don't improve for 50 rounds\n",
      "[20]\ttrain's l2: 0.973415\tvalid's l2: 0.99769\n",
      "[40]\ttrain's l2: 0.954632\tvalid's l2: 0.998507\n",
      "Early stopping, best iteration is:\n",
      "[1]\ttrain's l2: 0.994526\tvalid's l2: 0.9962\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[15869:MainThread](2024-05-08 16:21:53,215) INFO - qlib.workflow - [record_temp.py:198] - Signal record 'pred.pkl' has been saved as the artifact of the Experiment 1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'The following are prediction results of the LGBModel model.'\n",
      "                          score\n",
      "datetime   instrument          \n",
      "2023-11-07 000001.SZ  -0.000889\n",
      "           000002.SZ  -0.000889\n",
      "           000063.SZ   0.004676\n",
      "           000069.SZ  -0.000889\n",
      "           000100.SZ  -0.000889\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[15869:MainThread](2024-05-08 16:21:53,540) INFO - qlib.timer - [log.py:127] - Time cost: 0.000s | waiting `async_log` Done\n",
      "[15869:MainThread](2024-05-08 16:21:53,568) INFO - qlib.workflow - [exp.py:258] - Experiment 2 starts running ...\n",
      "[15869:MainThread](2024-05-08 16:21:53,578) INFO - qlib.workflow - [recorder.py:341] - Recorder b39bbac99d014e4c9481cb4b34b2e42c starts running under Experiment 2 ...\n",
      "warning: Not a git repository. Use --no-index to compare two paths outside a working tree\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:21:53,706) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff.\n",
      "fatal: not a git repository (or any parent up to mount point /root)\n",
      "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n",
      "[15869:MainThread](2024-05-08 16:21:53,842) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git status.\n",
      "error: unknown option `cached'\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:21:53,982) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff --cached.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Learning rate set to 0.104514\n",
      "0:\tlearn: 0.9978738\ttest: 0.9980749\tbest: 0.9980749 (0)\ttotal: 10.3ms\tremaining: 10.3s\n",
      "20:\tlearn: 0.9947660\ttest: 0.9984189\tbest: 0.9980727 (2)\ttotal: 74.7ms\tremaining: 3.48s\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[15869:MainThread](2024-05-08 16:21:56,838) INFO - qlib.workflow - [record_temp.py:198] - Signal record 'pred.pkl' has been saved as the artifact of the Experiment 2\n",
      "[15869:MainThread](2024-05-08 16:21:56,845) INFO - qlib.timer - [log.py:127] - Time cost: 0.000s | waiting `async_log` Done\n",
      "[15869:MainThread](2024-05-08 16:21:56,870) INFO - qlib.workflow - [exp.py:258] - Experiment 3 starts running ...\n",
      "[15869:MainThread](2024-05-08 16:21:56,880) INFO - qlib.workflow - [recorder.py:341] - Recorder bd58570ce7bd4e5baba4975dad07baba starts running under Experiment 3 ...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "40:\tlearn: 0.9919130\ttest: 0.9988346\tbest: 0.9980727 (2)\ttotal: 145ms\tremaining: 3.39s\n",
      "bestTest = 0.9980726513\n",
      "bestIteration = 2\n",
      "Shrink model to first 3 iterations.\n",
      "'The following are prediction results of the CatBoostModel model.'\n",
      "                          score\n",
      "datetime   instrument          \n",
      "2023-11-07 000001.SZ  -0.001396\n",
      "           000002.SZ   0.000531\n",
      "           000063.SZ   0.000887\n",
      "           000069.SZ  -0.001029\n",
      "           000100.SZ  -0.001159\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "warning: Not a git repository. Use --no-index to compare two paths outside a working tree\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:21:57,017) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff.\n",
      "fatal: not a git repository (or any parent up to mount point /root)\n",
      "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n",
      "[15869:MainThread](2024-05-08 16:21:57,164) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git status.\n",
      "error: unknown option `cached'\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:21:57,312) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff --cached.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\ttrain-rmse:0.99572\tvalid-rmse:0.99818\n",
      "[20]\ttrain-rmse:0.96407\tvalid-rmse:1.00112\n",
      "[40]\ttrain-rmse:0.93773\tvalid-rmse:1.00327\n",
      "[50]\ttrain-rmse:0.92607\tvalid-rmse:1.00374\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[15869:MainThread](2024-05-08 16:22:01,870) INFO - qlib.workflow - [record_temp.py:198] - Signal record 'pred.pkl' has been saved as the artifact of the Experiment 3\n",
      "[15869:MainThread](2024-05-08 16:22:01,876) INFO - qlib.timer - [log.py:127] - Time cost: 0.000s | waiting `async_log` Done\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'The following are prediction results of the XGBModel model.'\n",
      "                          score\n",
      "datetime   instrument          \n",
      "2023-11-07 000001.SZ   0.037107\n",
      "           000002.SZ   0.001598\n",
      "           000063.SZ   0.031544\n",
      "           000069.SZ   0.081213\n",
      "           000100.SZ   0.072662\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[15869:MainThread](2024-05-08 16:22:01,897) INFO - qlib.TCN - [pytorch_tcn.py:63] - TCN pytorch version...\n",
      "[15869:MainThread](2024-05-08 16:22:01,899) INFO - qlib.TCN - [pytorch_tcn.py:81] - TCN parameters setting:\n",
      "d_feat : 360\n",
      "n_chans : 128\n",
      "kernel_size : 5\n",
      "num_layers : 5\n",
      "dropout : 0.5\n",
      "n_epochs : 200\n",
      "lr : 0.0001\n",
      "metric : \n",
      "batch_size : 2000\n",
      "early_stop : 20\n",
      "optimizer : adam\n",
      "loss_type : mse\n",
      "visible_GPU : 0\n",
      "use_GPU : True\n",
      "seed : 1\n",
      "[15869:MainThread](2024-05-08 16:22:01,919) INFO - qlib.TCN - [pytorch_tcn.py:127] - model:\n",
      "TCNModel(\n",
      "  (tcn): TemporalConvNet(\n",
      "    (network): Sequential(\n",
      "      (0): TemporalBlock(\n",
      "        (conv1): Conv1d(360, 128, kernel_size=(5,), stride=(1,), padding=(4,))\n",
      "        (chomp1): Chomp1d()\n",
      "        (relu1): ReLU()\n",
      "        (dropout1): Dropout(p=0.5, inplace=False)\n",
      "        (conv2): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(4,))\n",
      "        (chomp2): Chomp1d()\n",
      "        (relu2): ReLU()\n",
      "        (dropout2): Dropout(p=0.5, inplace=False)\n",
      "        (net): Sequential(\n",
      "          (0): Conv1d(360, 128, kernel_size=(5,), stride=(1,), padding=(4,))\n",
      "          (1): Chomp1d()\n",
      "          (2): ReLU()\n",
      "          (3): Dropout(p=0.5, inplace=False)\n",
      "          (4): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(4,))\n",
      "          (5): Chomp1d()\n",
      "          (6): ReLU()\n",
      "          (7): Dropout(p=0.5, inplace=False)\n",
      "        )\n",
      "        (downsample): Conv1d(360, 128, kernel_size=(1,), stride=(1,))\n",
      "        (relu): ReLU()\n",
      "      )\n",
      "      (1): TemporalBlock(\n",
      "        (conv1): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(8,), dilation=(2,))\n",
      "        (chomp1): Chomp1d()\n",
      "        (relu1): ReLU()\n",
      "        (dropout1): Dropout(p=0.5, inplace=False)\n",
      "        (conv2): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(8,), dilation=(2,))\n",
      "        (chomp2): Chomp1d()\n",
      "        (relu2): ReLU()\n",
      "        (dropout2): Dropout(p=0.5, inplace=False)\n",
      "        (net): Sequential(\n",
      "          (0): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(8,), dilation=(2,))\n",
      "          (1): Chomp1d()\n",
      "          (2): ReLU()\n",
      "          (3): Dropout(p=0.5, inplace=False)\n",
      "          (4): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(8,), dilation=(2,))\n",
      "          (5): Chomp1d()\n",
      "          (6): ReLU()\n",
      "          (7): Dropout(p=0.5, inplace=False)\n",
      "        )\n",
      "        (relu): ReLU()\n",
      "      )\n",
      "      (2): TemporalBlock(\n",
      "        (conv1): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(16,), dilation=(4,))\n",
      "        (chomp1): Chomp1d()\n",
      "        (relu1): ReLU()\n",
      "        (dropout1): Dropout(p=0.5, inplace=False)\n",
      "        (conv2): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(16,), dilation=(4,))\n",
      "        (chomp2): Chomp1d()\n",
      "        (relu2): ReLU()\n",
      "        (dropout2): Dropout(p=0.5, inplace=False)\n",
      "        (net): Sequential(\n",
      "          (0): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(16,), dilation=(4,))\n",
      "          (1): Chomp1d()\n",
      "          (2): ReLU()\n",
      "          (3): Dropout(p=0.5, inplace=False)\n",
      "          (4): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(16,), dilation=(4,))\n",
      "          (5): Chomp1d()\n",
      "          (6): ReLU()\n",
      "          (7): Dropout(p=0.5, inplace=False)\n",
      "        )\n",
      "        (relu): ReLU()\n",
      "      )\n",
      "      (3): TemporalBlock(\n",
      "        (conv1): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(32,), dilation=(8,))\n",
      "        (chomp1): Chomp1d()\n",
      "        (relu1): ReLU()\n",
      "        (dropout1): Dropout(p=0.5, inplace=False)\n",
      "        (conv2): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(32,), dilation=(8,))\n",
      "        (chomp2): Chomp1d()\n",
      "        (relu2): ReLU()\n",
      "        (dropout2): Dropout(p=0.5, inplace=False)\n",
      "        (net): Sequential(\n",
      "          (0): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(32,), dilation=(8,))\n",
      "          (1): Chomp1d()\n",
      "          (2): ReLU()\n",
      "          (3): Dropout(p=0.5, inplace=False)\n",
      "          (4): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(32,), dilation=(8,))\n",
      "          (5): Chomp1d()\n",
      "          (6): ReLU()\n",
      "          (7): Dropout(p=0.5, inplace=False)\n",
      "        )\n",
      "        (relu): ReLU()\n",
      "      )\n",
      "      (4): TemporalBlock(\n",
      "        (conv1): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(64,), dilation=(16,))\n",
      "        (chomp1): Chomp1d()\n",
      "        (relu1): ReLU()\n",
      "        (dropout1): Dropout(p=0.5, inplace=False)\n",
      "        (conv2): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(64,), dilation=(16,))\n",
      "        (chomp2): Chomp1d()\n",
      "        (relu2): ReLU()\n",
      "        (dropout2): Dropout(p=0.5, inplace=False)\n",
      "        (net): Sequential(\n",
      "          (0): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(64,), dilation=(16,))\n",
      "          (1): Chomp1d()\n",
      "          (2): ReLU()\n",
      "          (3): Dropout(p=0.5, inplace=False)\n",
      "          (4): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(64,), dilation=(16,))\n",
      "          (5): Chomp1d()\n",
      "          (6): ReLU()\n",
      "          (7): Dropout(p=0.5, inplace=False)\n",
      "        )\n",
      "        (relu): ReLU()\n",
      "      )\n",
      "    )\n",
      "  )\n",
      "  (linear): Linear(in_features=128, out_features=1, bias=True)\n",
      ")\n",
      "[15869:MainThread](2024-05-08 16:22:01,920) INFO - qlib.TCN - [pytorch_tcn.py:128] - model size: 0.9695 MB\n",
      "[15869:MainThread](2024-05-08 16:22:06,100) INFO - qlib.workflow - [exp.py:258] - Experiment 4 starts running ...\n",
      "[15869:MainThread](2024-05-08 16:22:06,111) INFO - qlib.workflow - [recorder.py:341] - Recorder ce58f40c63cc452db461b439177495f9 starts running under Experiment 4 ...\n",
      "warning: Not a git repository. Use --no-index to compare two paths outside a working tree\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:22:06,435) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff.\n",
      "fatal: not a git repository (or any parent up to mount point /root)\n",
      "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n",
      "[15869:MainThread](2024-05-08 16:22:06,753) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git status.\n",
      "error: unknown option `cached'\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:22:07,075) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff --cached.\n",
      "[15869:MainThread](2024-05-08 16:22:09,826) INFO - qlib.TCN - [pytorch_tcn.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:09,830) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch0:\n",
      "[15869:MainThread](2024-05-08 16:22:09,832) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:11,476) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:11,899) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.996176, valid -0.998351\n",
      "[15869:MainThread](2024-05-08 16:22:11,907) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch1:\n",
      "[15869:MainThread](2024-05-08 16:22:11,908) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:13,524) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:13,929) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.994765, valid -0.997757\n",
      "[15869:MainThread](2024-05-08 16:22:13,937) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch2:\n",
      "[15869:MainThread](2024-05-08 16:22:13,938) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:15,393) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:15,805) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.993196, valid -0.997564\n",
      "[15869:MainThread](2024-05-08 16:22:15,813) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch3:\n",
      "[15869:MainThread](2024-05-08 16:22:15,814) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:17,367) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:17,790) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.993414, valid -0.998609\n",
      "[15869:MainThread](2024-05-08 16:22:17,791) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch4:\n",
      "[15869:MainThread](2024-05-08 16:22:17,792) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:19,528) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:19,936) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.993362, valid -0.998814\n",
      "[15869:MainThread](2024-05-08 16:22:19,937) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch5:\n",
      "[15869:MainThread](2024-05-08 16:22:19,938) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:21,670) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:22,066) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.992196, valid -0.999042\n",
      "[15869:MainThread](2024-05-08 16:22:22,068) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch6:\n",
      "[15869:MainThread](2024-05-08 16:22:22,069) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:23,793) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:24,212) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.992233, valid -0.998219\n",
      "[15869:MainThread](2024-05-08 16:22:24,215) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch7:\n",
      "[15869:MainThread](2024-05-08 16:22:24,216) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:25,908) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:26,416) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.991949, valid -1.000200\n",
      "[15869:MainThread](2024-05-08 16:22:26,417) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch8:\n",
      "[15869:MainThread](2024-05-08 16:22:26,418) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:28,019) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:28,516) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.990422, valid -0.998734\n",
      "[15869:MainThread](2024-05-08 16:22:28,517) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch9:\n",
      "[15869:MainThread](2024-05-08 16:22:28,519) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:30,072) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:30,459) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.989462, valid -0.998489\n",
      "[15869:MainThread](2024-05-08 16:22:30,460) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch10:\n",
      "[15869:MainThread](2024-05-08 16:22:30,460) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:32,007) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:32,470) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.989585, valid -0.998534\n",
      "[15869:MainThread](2024-05-08 16:22:32,471) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch11:\n",
      "[15869:MainThread](2024-05-08 16:22:32,472) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:34,099) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:34,498) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.989329, valid -0.999371\n",
      "[15869:MainThread](2024-05-08 16:22:34,499) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch12:\n",
      "[15869:MainThread](2024-05-08 16:22:34,501) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:36,169) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:36,582) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.989296, valid -0.998884\n",
      "[15869:MainThread](2024-05-08 16:22:36,583) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch13:\n",
      "[15869:MainThread](2024-05-08 16:22:36,584) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:38,257) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:38,676) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.988720, valid -0.999084\n",
      "[15869:MainThread](2024-05-08 16:22:38,678) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch14:\n",
      "[15869:MainThread](2024-05-08 16:22:38,679) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:40,166) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:40,662) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.988216, valid -1.000444\n",
      "[15869:MainThread](2024-05-08 16:22:40,665) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch15:\n",
      "[15869:MainThread](2024-05-08 16:22:40,666) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:42,393) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:42,834) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.988852, valid -1.002323\n",
      "[15869:MainThread](2024-05-08 16:22:42,836) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch16:\n",
      "[15869:MainThread](2024-05-08 16:22:42,837) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:44,516) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:44,926) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.986744, valid -1.000849\n",
      "[15869:MainThread](2024-05-08 16:22:44,927) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch17:\n",
      "[15869:MainThread](2024-05-08 16:22:44,928) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:46,550) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:47,013) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.985853, valid -1.000646\n",
      "[15869:MainThread](2024-05-08 16:22:47,015) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch18:\n",
      "[15869:MainThread](2024-05-08 16:22:47,017) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:48,535) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:49,005) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.986070, valid -1.000616\n",
      "[15869:MainThread](2024-05-08 16:22:49,006) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch19:\n",
      "[15869:MainThread](2024-05-08 16:22:49,008) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:50,605) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:51,011) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.985525, valid -1.002191\n",
      "[15869:MainThread](2024-05-08 16:22:51,012) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch20:\n",
      "[15869:MainThread](2024-05-08 16:22:51,014) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:52,635) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:53,036) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.984820, valid -1.001165\n",
      "[15869:MainThread](2024-05-08 16:22:53,037) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch21:\n",
      "[15869:MainThread](2024-05-08 16:22:53,038) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:54,699) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:55,163) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.983067, valid -1.002893\n",
      "[15869:MainThread](2024-05-08 16:22:55,164) INFO - qlib.TCN - [pytorch_tcn.py:244] - Epoch22:\n",
      "[15869:MainThread](2024-05-08 16:22:55,165) INFO - qlib.TCN - [pytorch_tcn.py:245] - training...\n",
      "[15869:MainThread](2024-05-08 16:22:56,771) INFO - qlib.TCN - [pytorch_tcn.py:247] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:22:57,211) INFO - qlib.TCN - [pytorch_tcn.py:250] - train -0.983928, valid -1.001834\n",
      "[15869:MainThread](2024-05-08 16:22:57,213) INFO - qlib.TCN - [pytorch_tcn.py:262] - early stop\n",
      "[15869:MainThread](2024-05-08 16:22:57,214) INFO - qlib.TCN - [pytorch_tcn.py:265] - best score: -0.997564 @ 2\n",
      "[15869:MainThread](2024-05-08 16:22:57,376) INFO - qlib.workflow - [record_temp.py:198] - Signal record 'pred.pkl' has been saved as the artifact of the Experiment 4\n",
      "[15869:MainThread](2024-05-08 16:22:57,387) INFO - qlib.timer - [log.py:127] - Time cost: 0.000s | waiting `async_log` Done\n",
      "[15869:MainThread](2024-05-08 16:22:57,412) INFO - qlib.LSTM - [pytorch_lstm.py:58] - LSTM pytorch version...\n",
      "[15869:MainThread](2024-05-08 16:22:57,413) INFO - qlib.LSTM - [pytorch_lstm.py:75] - LSTM parameters setting:\n",
      "d_feat : 360\n",
      "hidden_size : 64\n",
      "num_layers : 2\n",
      "dropout : 0.0\n",
      "n_epochs : 200\n",
      "lr : 0.0001\n",
      "metric : \n",
      "batch_size : 2000\n",
      "early_stop : 20\n",
      "optimizer : adam\n",
      "loss_type : mse\n",
      "visible_GPU : 0\n",
      "use_GPU : True\n",
      "seed : 1\n",
      "[15869:MainThread](2024-05-08 16:22:57,422) INFO - qlib.workflow - [exp.py:258] - Experiment 5 starts running ...\n",
      "[15869:MainThread](2024-05-08 16:22:57,433) INFO - qlib.workflow - [recorder.py:341] - Recorder df32cf8c810b4b2c989d06b5e3467b95 starts running under Experiment 5 ...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'The following are prediction results of the TCN model.'\n",
      "                          score\n",
      "datetime   instrument          \n",
      "2023-11-07 000001.SZ  -0.018866\n",
      "           000002.SZ  -0.010857\n",
      "           000063.SZ   0.051414\n",
      "           000069.SZ   0.005111\n",
      "           000100.SZ   0.000436\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "warning: Not a git repository. Use --no-index to compare two paths outside a working tree\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:22:57,775) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff.\n",
      "fatal: not a git repository (or any parent up to mount point /root)\n",
      "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n",
      "[15869:MainThread](2024-05-08 16:22:58,167) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git status.\n",
      "error: unknown option `cached'\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:22:58,583) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff --cached.\n",
      "[15869:MainThread](2024-05-08 16:23:01,169) INFO - qlib.LSTM - [pytorch_lstm.py:230] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:01,171) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch0:\n",
      "[15869:MainThread](2024-05-08 16:23:01,172) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:02,044) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:02,233) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.998506, valid -0.997679\n",
      "[15869:MainThread](2024-05-08 16:23:02,237) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch1:\n",
      "[15869:MainThread](2024-05-08 16:23:02,238) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:03,031) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:03,271) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.996743, valid -0.996829\n",
      "[15869:MainThread](2024-05-08 16:23:03,275) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch2:\n",
      "[15869:MainThread](2024-05-08 16:23:03,276) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:04,061) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:04,310) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.995725, valid -0.996649\n",
      "[15869:MainThread](2024-05-08 16:23:04,312) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch3:\n",
      "[15869:MainThread](2024-05-08 16:23:04,313) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:05,213) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:05,418) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.995122, valid -0.996826\n",
      "[15869:MainThread](2024-05-08 16:23:05,422) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch4:\n",
      "[15869:MainThread](2024-05-08 16:23:05,423) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:06,235) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:06,439) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.994592, valid -0.997129\n",
      "[15869:MainThread](2024-05-08 16:23:06,442) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch5:\n",
      "[15869:MainThread](2024-05-08 16:23:06,444) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:07,236) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:07,433) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.994167, valid -0.997342\n",
      "[15869:MainThread](2024-05-08 16:23:07,434) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch6:\n",
      "[15869:MainThread](2024-05-08 16:23:07,435) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:08,249) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:08,459) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.993791, valid -0.997406\n",
      "[15869:MainThread](2024-05-08 16:23:08,460) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch7:\n",
      "[15869:MainThread](2024-05-08 16:23:08,462) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:09,209) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:09,389) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.993377, valid -0.997863\n",
      "[15869:MainThread](2024-05-08 16:23:09,391) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch8:\n",
      "[15869:MainThread](2024-05-08 16:23:09,392) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:10,140) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:10,369) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.992918, valid -0.997949\n",
      "[15869:MainThread](2024-05-08 16:23:10,370) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch9:\n",
      "[15869:MainThread](2024-05-08 16:23:10,372) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:11,263) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:11,473) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.992466, valid -0.998174\n",
      "[15869:MainThread](2024-05-08 16:23:11,475) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch10:\n",
      "[15869:MainThread](2024-05-08 16:23:11,476) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:12,236) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:12,429) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.992026, valid -0.998376\n",
      "[15869:MainThread](2024-05-08 16:23:12,433) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch11:\n",
      "[15869:MainThread](2024-05-08 16:23:12,435) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:13,218) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:13,408) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.991577, valid -0.998647\n",
      "[15869:MainThread](2024-05-08 16:23:13,410) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch12:\n",
      "[15869:MainThread](2024-05-08 16:23:13,411) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:14,179) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:14,362) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.991044, valid -0.998403\n",
      "[15869:MainThread](2024-05-08 16:23:14,364) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch13:\n",
      "[15869:MainThread](2024-05-08 16:23:14,365) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:15,161) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:15,379) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.990496, valid -0.998659\n",
      "[15869:MainThread](2024-05-08 16:23:15,381) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch14:\n",
      "[15869:MainThread](2024-05-08 16:23:15,382) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:16,208) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:16,446) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.989883, valid -0.999183\n",
      "[15869:MainThread](2024-05-08 16:23:16,449) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch15:\n",
      "[15869:MainThread](2024-05-08 16:23:16,450) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:17,303) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:17,515) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.989275, valid -0.999392\n",
      "[15869:MainThread](2024-05-08 16:23:17,516) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch16:\n",
      "[15869:MainThread](2024-05-08 16:23:17,517) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:18,326) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:18,519) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.988817, valid -0.999843\n",
      "[15869:MainThread](2024-05-08 16:23:18,520) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch17:\n",
      "[15869:MainThread](2024-05-08 16:23:18,521) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:19,355) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:19,563) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.988157, valid -0.999595\n",
      "[15869:MainThread](2024-05-08 16:23:19,565) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch18:\n",
      "[15869:MainThread](2024-05-08 16:23:19,566) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:20,315) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:20,499) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.987507, valid -1.000360\n",
      "[15869:MainThread](2024-05-08 16:23:20,500) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch19:\n",
      "[15869:MainThread](2024-05-08 16:23:20,501) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:21,333) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:21,582) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.986602, valid -1.000795\n",
      "[15869:MainThread](2024-05-08 16:23:21,583) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch20:\n",
      "[15869:MainThread](2024-05-08 16:23:21,584) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:22,434) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:22,617) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.985911, valid -1.000449\n",
      "[15869:MainThread](2024-05-08 16:23:22,620) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch21:\n",
      "[15869:MainThread](2024-05-08 16:23:22,623) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:23,415) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:23,643) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.985190, valid -1.001579\n",
      "[15869:MainThread](2024-05-08 16:23:23,644) INFO - qlib.LSTM - [pytorch_lstm.py:234] - Epoch22:\n",
      "[15869:MainThread](2024-05-08 16:23:23,645) INFO - qlib.LSTM - [pytorch_lstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:24,474) INFO - qlib.LSTM - [pytorch_lstm.py:237] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:24,673) INFO - qlib.LSTM - [pytorch_lstm.py:240] - train -0.984202, valid -1.001205\n",
      "[15869:MainThread](2024-05-08 16:23:24,675) INFO - qlib.LSTM - [pytorch_lstm.py:252] - early stop\n",
      "[15869:MainThread](2024-05-08 16:23:24,676) INFO - qlib.LSTM - [pytorch_lstm.py:255] - best score: -0.996649 @ 2\n",
      "[15869:MainThread](2024-05-08 16:23:24,781) INFO - qlib.workflow - [record_temp.py:198] - Signal record 'pred.pkl' has been saved as the artifact of the Experiment 5\n",
      "[15869:MainThread](2024-05-08 16:23:24,788) INFO - qlib.timer - [log.py:127] - Time cost: 0.000s | waiting `async_log` Done\n",
      "[15869:MainThread](2024-05-08 16:23:24,811) INFO - qlib.TransformerModel - [pytorch_localformer.py:64] - Naive Transformer:\n",
      "batch_size : 2048\n",
      "device : cuda:0\n",
      "[15869:MainThread](2024-05-08 16:23:24,828) INFO - qlib.workflow - [exp.py:258] - Experiment 6 starts running ...\n",
      "[15869:MainThread](2024-05-08 16:23:24,847) INFO - qlib.workflow - [recorder.py:341] - Recorder 9799e1c366d04ad080ce6fb35559f497 starts running under Experiment 6 ...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'The following are prediction results of the LSTM model.'\n",
      "                          score\n",
      "datetime   instrument          \n",
      "2023-11-07 000001.SZ   0.020639\n",
      "           000002.SZ   0.003242\n",
      "           000063.SZ   0.009585\n",
      "           000069.SZ  -0.000350\n",
      "           000100.SZ   0.015166\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "warning: Not a git repository. Use --no-index to compare two paths outside a working tree\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:23:25,188) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff.\n",
      "fatal: not a git repository (or any parent up to mount point /root)\n",
      "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n",
      "[15869:MainThread](2024-05-08 16:23:25,527) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git status.\n",
      "error: unknown option `cached'\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:23:25,857) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff --cached.\n",
      "[15869:MainThread](2024-05-08 16:23:28,335) INFO - qlib.TransformerModel - [pytorch_localformer.py:184] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:28,337) INFO - qlib.TransformerModel - [pytorch_localformer.py:188] - Epoch0:\n",
      "[15869:MainThread](2024-05-08 16:23:28,338) INFO - qlib.TransformerModel - [pytorch_localformer.py:189] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:29,797) INFO - qlib.TransformerModel - [pytorch_localformer.py:191] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:30,084) INFO - qlib.TransformerModel - [pytorch_localformer.py:194] - train -0.995800, valid -0.996709\n",
      "[15869:MainThread](2024-05-08 16:23:30,105) INFO - qlib.TransformerModel - [pytorch_localformer.py:188] - Epoch1:\n",
      "[15869:MainThread](2024-05-08 16:23:30,107) INFO - qlib.TransformerModel - [pytorch_localformer.py:189] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:31,659) INFO - qlib.TransformerModel - [pytorch_localformer.py:191] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:31,974) INFO - qlib.TransformerModel - [pytorch_localformer.py:194] - train -0.995464, valid -0.996881\n",
      "[15869:MainThread](2024-05-08 16:23:31,976) INFO - qlib.TransformerModel - [pytorch_localformer.py:188] - Epoch2:\n",
      "[15869:MainThread](2024-05-08 16:23:31,978) INFO - qlib.TransformerModel - [pytorch_localformer.py:189] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:33,441) INFO - qlib.TransformerModel - [pytorch_localformer.py:191] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:33,709) INFO - qlib.TransformerModel - [pytorch_localformer.py:194] - train -0.995058, valid -0.996909\n",
      "[15869:MainThread](2024-05-08 16:23:33,711) INFO - qlib.TransformerModel - [pytorch_localformer.py:188] - Epoch3:\n",
      "[15869:MainThread](2024-05-08 16:23:33,712) INFO - qlib.TransformerModel - [pytorch_localformer.py:189] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:35,135) INFO - qlib.TransformerModel - [pytorch_localformer.py:191] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:35,408) INFO - qlib.TransformerModel - [pytorch_localformer.py:194] - train -0.994388, valid -0.997673\n",
      "[15869:MainThread](2024-05-08 16:23:35,409) INFO - qlib.TransformerModel - [pytorch_localformer.py:188] - Epoch4:\n",
      "[15869:MainThread](2024-05-08 16:23:35,411) INFO - qlib.TransformerModel - [pytorch_localformer.py:189] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:36,933) INFO - qlib.TransformerModel - [pytorch_localformer.py:191] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:37,220) INFO - qlib.TransformerModel - [pytorch_localformer.py:194] - train -0.993923, valid -0.997676\n",
      "[15869:MainThread](2024-05-08 16:23:37,224) INFO - qlib.TransformerModel - [pytorch_localformer.py:188] - Epoch5:\n",
      "[15869:MainThread](2024-05-08 16:23:37,225) INFO - qlib.TransformerModel - [pytorch_localformer.py:189] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:38,808) INFO - qlib.TransformerModel - [pytorch_localformer.py:191] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:39,080) INFO - qlib.TransformerModel - [pytorch_localformer.py:194] - train -0.993674, valid -0.998404\n",
      "[15869:MainThread](2024-05-08 16:23:39,082) INFO - qlib.TransformerModel - [pytorch_localformer.py:206] - early stop\n",
      "[15869:MainThread](2024-05-08 16:23:39,083) INFO - qlib.TransformerModel - [pytorch_localformer.py:209] - best score: -0.996709 @ 0\n",
      "[15869:MainThread](2024-05-08 16:23:39,216) INFO - qlib.workflow - [record_temp.py:198] - Signal record 'pred.pkl' has been saved as the artifact of the Experiment 6\n",
      "[15869:MainThread](2024-05-08 16:23:39,224) INFO - qlib.timer - [log.py:127] - Time cost: 0.000s | waiting `async_log` Done\n",
      "[15869:MainThread](2024-05-08 16:23:39,248) INFO - qlib.GRU - [pytorch_gru.py:59] - GRU pytorch version...\n",
      "[15869:MainThread](2024-05-08 16:23:39,249) INFO - qlib.GRU - [pytorch_gru.py:76] - GRU parameters setting:\n",
      "d_feat : 360\n",
      "hidden_size : 64\n",
      "num_layers : 2\n",
      "dropout : 0.0\n",
      "n_epochs : 200\n",
      "lr : 0.0001\n",
      "metric : \n",
      "batch_size : 2000\n",
      "early_stop : 20\n",
      "optimizer : adam\n",
      "loss_type : mse\n",
      "visible_GPU : 0\n",
      "use_GPU : True\n",
      "seed : 1\n",
      "[15869:MainThread](2024-05-08 16:23:39,252) INFO - qlib.GRU - [pytorch_gru.py:119] - model:\n",
      "GRUModel(\n",
      "  (rnn): GRU(360, 64, num_layers=2, batch_first=True)\n",
      "  (fc_out): Linear(in_features=64, out_features=1, bias=True)\n",
      ")\n",
      "[15869:MainThread](2024-05-08 16:23:39,254) INFO - qlib.GRU - [pytorch_gru.py:120] - model size: 0.1019 MB\n",
      "[15869:MainThread](2024-05-08 16:23:39,260) INFO - qlib.workflow - [exp.py:258] - Experiment 7 starts running ...\n",
      "[15869:MainThread](2024-05-08 16:23:39,289) INFO - qlib.workflow - [recorder.py:341] - Recorder 44279ae8502546289791dc80566fc9e7 starts running under Experiment 7 ...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'The following are prediction results of the LocalformerModel model.'\n",
      "                          score\n",
      "datetime   instrument          \n",
      "2023-11-07 000001.SZ  -0.022484\n",
      "           000002.SZ  -0.021980\n",
      "           000063.SZ  -0.000214\n",
      "           000069.SZ  -0.019203\n",
      "           000100.SZ  -0.012748\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "warning: Not a git repository. Use --no-index to compare two paths outside a working tree\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:23:39,680) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff.\n",
      "fatal: not a git repository (or any parent up to mount point /root)\n",
      "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n",
      "[15869:MainThread](2024-05-08 16:23:40,029) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git status.\n",
      "error: unknown option `cached'\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:23:40,373) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff --cached.\n",
      "[15869:MainThread](2024-05-08 16:23:42,905) INFO - qlib.GRU - [pytorch_gru.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:42,907) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch0:\n",
      "[15869:MainThread](2024-05-08 16:23:42,909) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:43,701) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:43,912) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.996650, valid -0.999699\n",
      "[15869:MainThread](2024-05-08 16:23:43,916) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch1:\n",
      "[15869:MainThread](2024-05-08 16:23:43,917) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:44,731) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:44,913) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.995200, valid -0.998153\n",
      "[15869:MainThread](2024-05-08 16:23:44,916) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch2:\n",
      "[15869:MainThread](2024-05-08 16:23:44,917) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:45,682) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:45,905) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.994411, valid -0.997605\n",
      "[15869:MainThread](2024-05-08 16:23:45,907) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch3:\n",
      "[15869:MainThread](2024-05-08 16:23:45,908) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:46,701) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:46,936) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.993907, valid -0.997395\n",
      "[15869:MainThread](2024-05-08 16:23:46,938) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch4:\n",
      "[15869:MainThread](2024-05-08 16:23:46,939) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:47,774) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:47,992) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.993369, valid -0.997399\n",
      "[15869:MainThread](2024-05-08 16:23:47,993) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch5:\n",
      "[15869:MainThread](2024-05-08 16:23:47,994) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:48,786) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:48,998) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.992928, valid -0.997369\n",
      "[15869:MainThread](2024-05-08 16:23:49,002) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch6:\n",
      "[15869:MainThread](2024-05-08 16:23:49,003) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:49,799) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:49,979) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.992628, valid -0.997139\n",
      "[15869:MainThread](2024-05-08 16:23:49,982) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch7:\n",
      "[15869:MainThread](2024-05-08 16:23:49,983) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:50,714) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:50,887) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.992402, valid -0.997982\n",
      "[15869:MainThread](2024-05-08 16:23:50,889) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch8:\n",
      "[15869:MainThread](2024-05-08 16:23:50,890) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:51,643) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:51,859) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.991658, valid -0.997461\n",
      "[15869:MainThread](2024-05-08 16:23:51,862) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch9:\n",
      "[15869:MainThread](2024-05-08 16:23:51,863) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:52,625) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:52,807) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.991224, valid -0.997711\n",
      "[15869:MainThread](2024-05-08 16:23:52,808) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch10:\n",
      "[15869:MainThread](2024-05-08 16:23:52,809) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:53,566) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:53,744) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.990861, valid -0.997748\n",
      "[15869:MainThread](2024-05-08 16:23:53,745) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch11:\n",
      "[15869:MainThread](2024-05-08 16:23:53,747) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:54,536) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:54,717) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.990583, valid -0.998078\n",
      "[15869:MainThread](2024-05-08 16:23:54,718) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch12:\n",
      "[15869:MainThread](2024-05-08 16:23:54,720) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:55,550) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:55,784) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.990020, valid -0.998000\n",
      "[15869:MainThread](2024-05-08 16:23:55,787) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch13:\n",
      "[15869:MainThread](2024-05-08 16:23:55,789) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:56,488) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:56,686) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.989492, valid -0.998123\n",
      "[15869:MainThread](2024-05-08 16:23:56,688) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch14:\n",
      "[15869:MainThread](2024-05-08 16:23:56,689) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:57,556) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:57,741) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.989463, valid -0.998897\n",
      "[15869:MainThread](2024-05-08 16:23:57,743) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch15:\n",
      "[15869:MainThread](2024-05-08 16:23:57,744) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:58,572) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:58,796) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.988527, valid -0.999017\n",
      "[15869:MainThread](2024-05-08 16:23:58,797) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch16:\n",
      "[15869:MainThread](2024-05-08 16:23:58,798) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:23:59,535) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:23:59,735) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.988176, valid -0.999398\n",
      "[15869:MainThread](2024-05-08 16:23:59,737) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch17:\n",
      "[15869:MainThread](2024-05-08 16:23:59,738) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:00,503) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:00,682) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.987546, valid -0.999017\n",
      "[15869:MainThread](2024-05-08 16:24:00,684) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch18:\n",
      "[15869:MainThread](2024-05-08 16:24:00,686) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:01,406) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:01,626) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.987318, valid -0.999875\n",
      "[15869:MainThread](2024-05-08 16:24:01,627) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch19:\n",
      "[15869:MainThread](2024-05-08 16:24:01,627) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:02,393) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:02,629) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.986593, valid -1.000226\n",
      "[15869:MainThread](2024-05-08 16:24:02,630) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch20:\n",
      "[15869:MainThread](2024-05-08 16:24:02,632) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:03,502) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:03,690) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.986207, valid -0.999797\n",
      "[15869:MainThread](2024-05-08 16:24:03,692) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch21:\n",
      "[15869:MainThread](2024-05-08 16:24:03,692) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:04,424) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:04,604) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.985634, valid -1.000667\n",
      "[15869:MainThread](2024-05-08 16:24:04,606) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch22:\n",
      "[15869:MainThread](2024-05-08 16:24:04,608) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:05,414) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:05,635) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.984933, valid -1.000564\n",
      "[15869:MainThread](2024-05-08 16:24:05,637) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch23:\n",
      "[15869:MainThread](2024-05-08 16:24:05,638) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:06,434) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:06,646) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.985190, valid -1.000554\n",
      "[15869:MainThread](2024-05-08 16:24:06,648) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch24:\n",
      "[15869:MainThread](2024-05-08 16:24:06,649) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:07,415) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:07,634) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.984078, valid -1.001682\n",
      "[15869:MainThread](2024-05-08 16:24:07,636) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch25:\n",
      "[15869:MainThread](2024-05-08 16:24:07,637) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:08,393) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:08,626) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.983405, valid -1.000683\n",
      "[15869:MainThread](2024-05-08 16:24:08,627) INFO - qlib.GRU - [pytorch_gru.py:239] - Epoch26:\n",
      "[15869:MainThread](2024-05-08 16:24:08,629) INFO - qlib.GRU - [pytorch_gru.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:09,420) INFO - qlib.GRU - [pytorch_gru.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:09,598) INFO - qlib.GRU - [pytorch_gru.py:245] - train -0.983155, valid -1.000794\n",
      "[15869:MainThread](2024-05-08 16:24:09,600) INFO - qlib.GRU - [pytorch_gru.py:257] - early stop\n",
      "[15869:MainThread](2024-05-08 16:24:09,602) INFO - qlib.GRU - [pytorch_gru.py:260] - best score: -0.997139 @ 6\n",
      "[15869:MainThread](2024-05-08 16:24:09,710) INFO - qlib.workflow - [record_temp.py:198] - Signal record 'pred.pkl' has been saved as the artifact of the Experiment 7\n",
      "[15869:MainThread](2024-05-08 16:24:09,716) INFO - qlib.timer - [log.py:127] - Time cost: 0.000s | waiting `async_log` Done\n",
      "[15869:MainThread](2024-05-08 16:24:09,741) INFO - qlib.TransformerModel - [pytorch_transformer.py:63] - Naive Transformer:\n",
      "batch_size : 2048\n",
      "device : cuda:0\n",
      "[15869:MainThread](2024-05-08 16:24:09,753) INFO - qlib.workflow - [exp.py:258] - Experiment 8 starts running ...\n",
      "[15869:MainThread](2024-05-08 16:24:09,769) INFO - qlib.workflow - [recorder.py:341] - Recorder 49a5cbd600004f4ba04f2b41ad6b19f4 starts running under Experiment 8 ...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'The following are prediction results of the GRU model.'\n",
      "                          score\n",
      "datetime   instrument          \n",
      "2023-11-07 000001.SZ  -0.000784\n",
      "           000002.SZ  -0.011140\n",
      "           000063.SZ   0.043979\n",
      "           000069.SZ   0.009535\n",
      "           000100.SZ   0.013548\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "warning: Not a git repository. Use --no-index to compare two paths outside a working tree\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:24:10,102) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff.\n",
      "fatal: not a git repository (or any parent up to mount point /root)\n",
      "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n",
      "[15869:MainThread](2024-05-08 16:24:10,494) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git status.\n",
      "error: unknown option `cached'\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:24:10,838) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff --cached.\n",
      "[15869:MainThread](2024-05-08 16:24:13,416) INFO - qlib.TransformerModel - [pytorch_transformer.py:183] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:13,417) INFO - qlib.TransformerModel - [pytorch_transformer.py:187] - Epoch0:\n",
      "[15869:MainThread](2024-05-08 16:24:13,419) INFO - qlib.TransformerModel - [pytorch_transformer.py:188] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:14,572) INFO - qlib.TransformerModel - [pytorch_transformer.py:190] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:14,872) INFO - qlib.TransformerModel - [pytorch_transformer.py:193] - train -0.998113, valid -1.002077\n",
      "[15869:MainThread](2024-05-08 16:24:14,879) INFO - qlib.TransformerModel - [pytorch_transformer.py:187] - Epoch1:\n",
      "[15869:MainThread](2024-05-08 16:24:14,880) INFO - qlib.TransformerModel - [pytorch_transformer.py:188] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:16,116) INFO - qlib.TransformerModel - [pytorch_transformer.py:190] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:16,341) INFO - qlib.TransformerModel - [pytorch_transformer.py:193] - train -0.995525, valid -0.999986\n",
      "[15869:MainThread](2024-05-08 16:24:16,347) INFO - qlib.TransformerModel - [pytorch_transformer.py:187] - Epoch2:\n",
      "[15869:MainThread](2024-05-08 16:24:16,349) INFO - qlib.TransformerModel - [pytorch_transformer.py:188] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:17,684) INFO - qlib.TransformerModel - [pytorch_transformer.py:190] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:17,978) INFO - qlib.TransformerModel - [pytorch_transformer.py:193] - train -0.994626, valid -0.999632\n",
      "[15869:MainThread](2024-05-08 16:24:17,984) INFO - qlib.TransformerModel - [pytorch_transformer.py:187] - Epoch3:\n",
      "[15869:MainThread](2024-05-08 16:24:17,985) INFO - qlib.TransformerModel - [pytorch_transformer.py:188] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:19,172) INFO - qlib.TransformerModel - [pytorch_transformer.py:190] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:19,460) INFO - qlib.TransformerModel - [pytorch_transformer.py:193] - train -0.995048, valid -1.001102\n",
      "[15869:MainThread](2024-05-08 16:24:19,462) INFO - qlib.TransformerModel - [pytorch_transformer.py:187] - Epoch4:\n",
      "[15869:MainThread](2024-05-08 16:24:19,464) INFO - qlib.TransformerModel - [pytorch_transformer.py:188] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:20,573) INFO - qlib.TransformerModel - [pytorch_transformer.py:190] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:20,805) INFO - qlib.TransformerModel - [pytorch_transformer.py:193] - train -0.994680, valid -1.002607\n",
      "[15869:MainThread](2024-05-08 16:24:20,807) INFO - qlib.TransformerModel - [pytorch_transformer.py:187] - Epoch5:\n",
      "[15869:MainThread](2024-05-08 16:24:20,808) INFO - qlib.TransformerModel - [pytorch_transformer.py:188] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:21,923) INFO - qlib.TransformerModel - [pytorch_transformer.py:190] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:22,187) INFO - qlib.TransformerModel - [pytorch_transformer.py:193] - train -0.991041, valid -1.001030\n",
      "[15869:MainThread](2024-05-08 16:24:22,189) INFO - qlib.TransformerModel - [pytorch_transformer.py:187] - Epoch6:\n",
      "[15869:MainThread](2024-05-08 16:24:22,190) INFO - qlib.TransformerModel - [pytorch_transformer.py:188] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:23,316) INFO - qlib.TransformerModel - [pytorch_transformer.py:190] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:23,553) INFO - qlib.TransformerModel - [pytorch_transformer.py:193] - train -0.991969, valid -1.000492\n",
      "[15869:MainThread](2024-05-08 16:24:23,554) INFO - qlib.TransformerModel - [pytorch_transformer.py:187] - Epoch7:\n",
      "[15869:MainThread](2024-05-08 16:24:23,556) INFO - qlib.TransformerModel - [pytorch_transformer.py:188] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:24,761) INFO - qlib.TransformerModel - [pytorch_transformer.py:190] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:25,067) INFO - qlib.TransformerModel - [pytorch_transformer.py:193] - train -0.990651, valid -1.001399\n",
      "[15869:MainThread](2024-05-08 16:24:25,068) INFO - qlib.TransformerModel - [pytorch_transformer.py:205] - early stop\n",
      "[15869:MainThread](2024-05-08 16:24:25,070) INFO - qlib.TransformerModel - [pytorch_transformer.py:208] - best score: -0.999632 @ 2\n",
      "[15869:MainThread](2024-05-08 16:24:25,191) INFO - qlib.workflow - [record_temp.py:198] - Signal record 'pred.pkl' has been saved as the artifact of the Experiment 8\n",
      "[15869:MainThread](2024-05-08 16:24:25,198) INFO - qlib.timer - [log.py:127] - Time cost: 0.000s | waiting `async_log` Done\n",
      "[15869:MainThread](2024-05-08 16:24:25,220) INFO - qlib.ALSTM - [pytorch_alstm.py:59] - ALSTM pytorch version...\n",
      "[15869:MainThread](2024-05-08 16:24:25,222) INFO - qlib.ALSTM - [pytorch_alstm.py:76] - ALSTM parameters setting:\n",
      "d_feat : 360\n",
      "hidden_size : 64\n",
      "num_layers : 2\n",
      "dropout : 0.0\n",
      "n_epochs : 200\n",
      "lr : 0.0001\n",
      "metric : \n",
      "batch_size : 2000\n",
      "early_stop : 20\n",
      "optimizer : adam\n",
      "loss_type : mse\n",
      "device : cuda:0\n",
      "use_GPU : True\n",
      "seed : 1\n",
      "[15869:MainThread](2024-05-08 16:24:25,225) INFO - qlib.ALSTM - [pytorch_alstm.py:119] - model:\n",
      "ALSTMModel(\n",
      "  (net): Sequential(\n",
      "    (fc_in): Linear(in_features=360, out_features=64, bias=True)\n",
      "    (act): Tanh()\n",
      "  )\n",
      "  (rnn): GRU(64, 64, num_layers=2, batch_first=True)\n",
      "  (fc_out): Linear(in_features=128, out_features=1, bias=True)\n",
      "  (att_net): Sequential(\n",
      "    (att_fc_in): Linear(in_features=64, out_features=32, bias=True)\n",
      "    (att_dropout): Dropout(p=0.0, inplace=False)\n",
      "    (att_act): Tanh()\n",
      "    (att_fc_out): Linear(in_features=32, out_features=1, bias=False)\n",
      "    (att_softmax): Softmax(dim=1)\n",
      "  )\n",
      ")\n",
      "[15869:MainThread](2024-05-08 16:24:25,227) INFO - qlib.ALSTM - [pytorch_alstm.py:120] - model size: 0.0718 MB\n",
      "[15869:MainThread](2024-05-08 16:24:25,233) INFO - qlib.workflow - [exp.py:258] - Experiment 9 starts running ...\n",
      "[15869:MainThread](2024-05-08 16:24:25,244) INFO - qlib.workflow - [recorder.py:341] - Recorder 486cab18d0af4faa840bba382dd9091a starts running under Experiment 9 ...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'The following are prediction results of the TransformerModel model.'\n",
      "                          score\n",
      "datetime   instrument          \n",
      "2023-11-07 000001.SZ   0.045165\n",
      "           000002.SZ   0.009764\n",
      "           000063.SZ   0.049692\n",
      "           000069.SZ   0.033487\n",
      "           000100.SZ   0.060148\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "warning: Not a git repository. Use --no-index to compare two paths outside a working tree\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:24:25,571) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff.\n",
      "fatal: not a git repository (or any parent up to mount point /root)\n",
      "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n",
      "[15869:MainThread](2024-05-08 16:24:25,910) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git status.\n",
      "error: unknown option `cached'\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:24:26,248) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff --cached.\n",
      "[15869:MainThread](2024-05-08 16:24:28,721) INFO - qlib.ALSTM - [pytorch_alstm.py:235] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:28,724) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch0:\n",
      "[15869:MainThread](2024-05-08 16:24:28,726) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:29,538) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:29,739) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.995823, valid -0.996491\n",
      "[15869:MainThread](2024-05-08 16:24:29,743) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch1:\n",
      "[15869:MainThread](2024-05-08 16:24:29,744) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:30,681) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:30,878) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.995564, valid -0.996734\n",
      "[15869:MainThread](2024-05-08 16:24:30,879) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch2:\n",
      "[15869:MainThread](2024-05-08 16:24:30,880) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:31,807) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:32,054) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.995258, valid -0.996927\n",
      "[15869:MainThread](2024-05-08 16:24:32,055) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch3:\n",
      "[15869:MainThread](2024-05-08 16:24:32,056) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:32,919) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:33,201) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.995018, valid -0.997128\n",
      "[15869:MainThread](2024-05-08 16:24:33,202) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch4:\n",
      "[15869:MainThread](2024-05-08 16:24:33,204) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:34,279) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:34,528) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.994697, valid -0.997365\n",
      "[15869:MainThread](2024-05-08 16:24:34,530) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch5:\n",
      "[15869:MainThread](2024-05-08 16:24:34,531) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:35,406) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:35,597) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.994408, valid -0.997551\n",
      "[15869:MainThread](2024-05-08 16:24:35,598) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch6:\n",
      "[15869:MainThread](2024-05-08 16:24:35,599) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:36,454) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:36,655) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.994210, valid -0.997673\n",
      "[15869:MainThread](2024-05-08 16:24:36,657) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch7:\n",
      "[15869:MainThread](2024-05-08 16:24:36,658) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:37,506) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:37,702) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.994342, valid -0.998224\n",
      "[15869:MainThread](2024-05-08 16:24:37,703) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch8:\n",
      "[15869:MainThread](2024-05-08 16:24:37,705) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:38,648) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:38,890) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.993408, valid -0.998047\n",
      "[15869:MainThread](2024-05-08 16:24:38,891) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch9:\n",
      "[15869:MainThread](2024-05-08 16:24:38,892) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:39,972) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:40,178) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.993081, valid -0.998428\n",
      "[15869:MainThread](2024-05-08 16:24:40,181) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch10:\n",
      "[15869:MainThread](2024-05-08 16:24:40,183) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:41,094) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:41,308) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.992807, valid -0.998249\n",
      "[15869:MainThread](2024-05-08 16:24:41,310) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch11:\n",
      "[15869:MainThread](2024-05-08 16:24:41,311) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:42,237) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:42,450) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.992539, valid -0.998892\n",
      "[15869:MainThread](2024-05-08 16:24:42,451) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch12:\n",
      "[15869:MainThread](2024-05-08 16:24:42,451) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:43,281) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:43,533) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.992359, valid -0.998873\n",
      "[15869:MainThread](2024-05-08 16:24:43,534) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch13:\n",
      "[15869:MainThread](2024-05-08 16:24:43,536) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:44,425) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:44,669) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.991789, valid -0.998830\n",
      "[15869:MainThread](2024-05-08 16:24:44,671) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch14:\n",
      "[15869:MainThread](2024-05-08 16:24:44,672) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:45,589) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:45,802) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.992768, valid -1.000097\n",
      "[15869:MainThread](2024-05-08 16:24:45,804) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch15:\n",
      "[15869:MainThread](2024-05-08 16:24:45,805) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:46,734) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:46,953) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.991102, valid -0.999519\n",
      "[15869:MainThread](2024-05-08 16:24:46,955) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch16:\n",
      "[15869:MainThread](2024-05-08 16:24:46,957) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:47,862) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:48,069) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.991044, valid -0.999875\n",
      "[15869:MainThread](2024-05-08 16:24:48,070) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch17:\n",
      "[15869:MainThread](2024-05-08 16:24:48,071) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:48,899) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:49,144) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.990491, valid -0.999430\n",
      "[15869:MainThread](2024-05-08 16:24:49,146) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch18:\n",
      "[15869:MainThread](2024-05-08 16:24:49,147) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:50,077) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:50,268) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.990320, valid -1.000519\n",
      "[15869:MainThread](2024-05-08 16:24:50,270) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch19:\n",
      "[15869:MainThread](2024-05-08 16:24:50,271) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:51,173) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:51,370) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.989821, valid -1.000600\n",
      "[15869:MainThread](2024-05-08 16:24:51,372) INFO - qlib.ALSTM - [pytorch_alstm.py:239] - Epoch20:\n",
      "[15869:MainThread](2024-05-08 16:24:51,373) INFO - qlib.ALSTM - [pytorch_alstm.py:240] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:52,378) INFO - qlib.ALSTM - [pytorch_alstm.py:242] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:52,638) INFO - qlib.ALSTM - [pytorch_alstm.py:245] - train -0.989685, valid -0.999924\n",
      "[15869:MainThread](2024-05-08 16:24:52,640) INFO - qlib.ALSTM - [pytorch_alstm.py:257] - early stop\n",
      "[15869:MainThread](2024-05-08 16:24:52,642) INFO - qlib.ALSTM - [pytorch_alstm.py:260] - best score: -0.996491 @ 0\n",
      "[15869:MainThread](2024-05-08 16:24:52,741) INFO - qlib.workflow - [record_temp.py:198] - Signal record 'pred.pkl' has been saved as the artifact of the Experiment 9\n",
      "[15869:MainThread](2024-05-08 16:24:52,746) INFO - qlib.timer - [log.py:127] - Time cost: 0.000s | waiting `async_log` Done\n",
      "[15869:MainThread](2024-05-08 16:24:52,893) INFO - qlib.GATs - [pytorch_gats.py:63] - GATs pytorch version...\n",
      "[15869:MainThread](2024-05-08 16:24:52,894) INFO - qlib.GATs - [pytorch_gats.py:81] - GATs parameters setting:\n",
      "d_feat : 360\n",
      "hidden_size : 64\n",
      "num_layers : 2\n",
      "dropout : 0.0\n",
      "n_epochs : 200\n",
      "lr : 0.0001\n",
      "metric : \n",
      "early_stop : 20\n",
      "optimizer : adam\n",
      "loss_type : mse\n",
      "base_model : GRU\n",
      "model_path : None\n",
      "device : cuda:0\n",
      "use_GPU : True\n",
      "seed : 1\n",
      "[15869:MainThread](2024-05-08 16:24:52,897) INFO - qlib.GATs - [pytorch_gats.py:127] - model:\n",
      "GATModel(\n",
      "  (rnn): GRU(360, 64, num_layers=2, batch_first=True)\n",
      "  (transformation): Linear(in_features=64, out_features=64, bias=True)\n",
      "  (fc): Linear(in_features=64, out_features=64, bias=True)\n",
      "  (fc_out): Linear(in_features=64, out_features=1, bias=True)\n",
      "  (leaky_relu): LeakyReLU(negative_slope=0.01)\n",
      "  (softmax): Softmax(dim=1)\n",
      ")\n",
      "[15869:MainThread](2024-05-08 16:24:52,898) INFO - qlib.GATs - [pytorch_gats.py:128] - model size: 0.1099 MB\n",
      "[15869:MainThread](2024-05-08 16:24:52,902) INFO - qlib.workflow - [exp.py:258] - Experiment 10 starts running ...\n",
      "[15869:MainThread](2024-05-08 16:24:52,913) INFO - qlib.workflow - [recorder.py:341] - Recorder 62204fac341f4898abacfcc82320d001 starts running under Experiment 10 ...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'The following are prediction results of the ALSTM model.'\n",
      "                          score\n",
      "datetime   instrument          \n",
      "2023-11-07 000001.SZ  -0.000880\n",
      "           000002.SZ   0.000356\n",
      "           000063.SZ  -0.000417\n",
      "           000069.SZ   0.002335\n",
      "           000100.SZ  -0.006842\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "warning: Not a git repository. Use --no-index to compare two paths outside a working tree\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:24:53,238) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff.\n",
      "fatal: not a git repository (or any parent up to mount point /root)\n",
      "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n",
      "[15869:MainThread](2024-05-08 16:24:53,569) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git status.\n",
      "error: unknown option `cached'\n",
      "usage: git diff --no-index [<options>] <path> <path>\n",
      "\n",
      "Diff output format options\n",
      "    -p, --patch           generate patch\n",
      "    -s, --no-patch        suppress diff output\n",
      "    -u                    generate patch\n",
      "    -U, --unified[=<n>]   generate diffs with <n> lines context\n",
      "    -W, --function-context\n",
      "                          generate diffs with <n> lines context\n",
      "    --raw                 generate the diff in raw format\n",
      "    --patch-with-raw      synonym for '-p --raw'\n",
      "    --patch-with-stat     synonym for '-p --stat'\n",
      "    --numstat             machine friendly --stat\n",
      "    --shortstat           output only the last line of --stat\n",
      "    -X, --dirstat[=<param1,param2>...]\n",
      "                          output the distribution of relative amount of changes for each sub-directory\n",
      "    --cumulative          synonym for --dirstat=cumulative\n",
      "    --dirstat-by-file[=<param1,param2>...]\n",
      "                          synonym for --dirstat=files,param1,param2...\n",
      "    --check               warn if changes introduce conflict markers or whitespace errors\n",
      "    --summary             condensed summary such as creations, renames and mode changes\n",
      "    --name-only           show only names of changed files\n",
      "    --name-status         show only names and status of changed files\n",
      "    --stat[=<width>[,<name-width>[,<count>]]]\n",
      "                          generate diffstat\n",
      "    --stat-width <width>  generate diffstat with a given width\n",
      "    --stat-name-width <width>\n",
      "                          generate diffstat with a given name width\n",
      "    --stat-graph-width <width>\n",
      "                          generate diffstat with a given graph width\n",
      "    --stat-count <count>  generate diffstat with limited lines\n",
      "    --compact-summary     generate compact summary in diffstat\n",
      "    --binary              output a binary diff that can be applied\n",
      "    --full-index          show full pre- and post-image object names on the \"index\" lines\n",
      "    --color[=<when>]      show colored diff\n",
      "    --ws-error-highlight <kind>\n",
      "                          highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff\n",
      "    -z                    do not munge pathnames and use NULs as output field terminators in --raw or --numstat\n",
      "    --abbrev[=<n>]        use <n> digits to display SHA-1s\n",
      "    --src-prefix <prefix>\n",
      "                          show the given source prefix instead of \"a/\"\n",
      "    --dst-prefix <prefix>\n",
      "                          show the given destination prefix instead of \"b/\"\n",
      "    --line-prefix <prefix>\n",
      "                          prepend an additional prefix to every line of output\n",
      "    --no-prefix           do not show any source or destination prefix\n",
      "    --inter-hunk-context <n>\n",
      "                          show context between diff hunks up to the specified number of lines\n",
      "    --output-indicator-new <char>\n",
      "                          specify the character to indicate a new line instead of '+'\n",
      "    --output-indicator-old <char>\n",
      "                          specify the character to indicate an old line instead of '-'\n",
      "    --output-indicator-context <char>\n",
      "                          specify the character to indicate a context instead of ' '\n",
      "\n",
      "Diff rename options\n",
      "    -B, --break-rewrites[=<n>[/<m>]]\n",
      "                          break complete rewrite changes into pairs of delete and create\n",
      "    -M, --find-renames[=<n>]\n",
      "                          detect renames\n",
      "    -D, --irreversible-delete\n",
      "                          omit the preimage for deletes\n",
      "    -C, --find-copies[=<n>]\n",
      "                          detect copies\n",
      "    --find-copies-harder  use unmodified files as source to find copies\n",
      "    --no-renames          disable rename detection\n",
      "    --rename-empty        use empty blobs as rename source\n",
      "    --follow              continue listing the history of a file beyond renames\n",
      "    -l <n>                prevent rename/copy detection if the number of rename/copy targets exceeds given limit\n",
      "\n",
      "Diff algorithm options\n",
      "    --minimal             produce the smallest possible diff\n",
      "    -w, --ignore-all-space\n",
      "                          ignore whitespace when comparing lines\n",
      "    -b, --ignore-space-change\n",
      "                          ignore changes in amount of whitespace\n",
      "    --ignore-space-at-eol\n",
      "                          ignore changes in whitespace at EOL\n",
      "    --ignore-cr-at-eol    ignore carrier-return at the end of line\n",
      "    --ignore-blank-lines  ignore changes whose lines are all blank\n",
      "    --indent-heuristic    heuristic to shift diff hunk boundaries for easy reading\n",
      "    --patience            generate diff using the \"patience diff\" algorithm\n",
      "    --histogram           generate diff using the \"histogram diff\" algorithm\n",
      "    --diff-algorithm <algorithm>\n",
      "                          choose a diff algorithm\n",
      "    --anchored <text>     generate diff using the \"anchored diff\" algorithm\n",
      "    --word-diff[=<mode>]  show word diff, using <mode> to delimit changed words\n",
      "    --word-diff-regex <regex>\n",
      "                          use <regex> to decide what a word is\n",
      "    --color-words[=<regex>]\n",
      "                          equivalent to --word-diff=color --word-diff-regex=<regex>\n",
      "    --color-moved[=<mode>]\n",
      "                          moved lines of code are colored differently\n",
      "    --color-moved-ws <mode>\n",
      "                          how white spaces are ignored in --color-moved\n",
      "\n",
      "Other diff options\n",
      "    --relative[=<prefix>]\n",
      "                          when run from subdir, exclude changes outside and show relative paths\n",
      "    -a, --text            treat all files as text\n",
      "    -R                    swap two inputs, reverse the diff\n",
      "    --exit-code           exit with 1 if there were differences, 0 otherwise\n",
      "    --quiet               disable all output of the program\n",
      "    --ext-diff            allow an external diff helper to be executed\n",
      "    --textconv            run external text conversion filters when comparing binary files\n",
      "    --ignore-submodules[=<when>]\n",
      "                          ignore changes to submodules in the diff generation\n",
      "    --submodule[=<format>]\n",
      "                          specify how differences in submodules are shown\n",
      "    --ita-invisible-in-index\n",
      "                          hide 'git add -N' entries from the index\n",
      "    --ita-visible-in-index\n",
      "                          treat 'git add -N' entries as real in the index\n",
      "    -S <string>           look for differences that change the number of occurrences of the specified string\n",
      "    -G <regex>            look for differences that change the number of occurrences of the specified regex\n",
      "    --pickaxe-all         show all changes in the changeset with -S or -G\n",
      "    --pickaxe-regex       treat <string> in -S as extended POSIX regular expression\n",
      "    -O <file>             control the order in which files appear in the output\n",
      "    --find-object <object-id>\n",
      "                          look for differences that change the number of occurrences of the specified object\n",
      "    --diff-filter [(A|C|D|M|R|T|U|X|B)...[*]]\n",
      "                          select files by diff type\n",
      "    --output <file>       Output to a specific file\n",
      "\n",
      "[15869:MainThread](2024-05-08 16:24:53,903) INFO - qlib.workflow - [recorder.py:374] - Fail to log the uncommitted code of $CWD(/root/autodl-tmp/Stockformer/Stockformer_run/data_processing/eda_and_result_analyze) when run git diff --cached.\n",
      "[15869:MainThread](2024-05-08 16:24:56,372) INFO - qlib.GATs - [pytorch_gats.py:266] - Loading pretrained model Done...\n",
      "[15869:MainThread](2024-05-08 16:24:56,375) INFO - qlib.GATs - [pytorch_gats.py:269] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:56,377) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch0:\n",
      "[15869:MainThread](2024-05-08 16:24:56,379) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:24:58,605) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:24:59,338) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.995690, valid -0.996426\n",
      "[15869:MainThread](2024-05-08 16:24:59,342) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch1:\n",
      "[15869:MainThread](2024-05-08 16:24:59,343) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:01,946) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:02,625) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.995137, valid -0.996884\n",
      "[15869:MainThread](2024-05-08 16:25:02,626) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch2:\n",
      "[15869:MainThread](2024-05-08 16:25:02,628) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:04,922) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:05,665) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.994886, valid -0.996635\n",
      "[15869:MainThread](2024-05-08 16:25:05,666) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch3:\n",
      "[15869:MainThread](2024-05-08 16:25:05,668) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:07,791) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:08,570) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.994135, valid -0.997006\n",
      "[15869:MainThread](2024-05-08 16:25:08,573) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch4:\n",
      "[15869:MainThread](2024-05-08 16:25:08,575) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:10,746) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:11,483) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.993644, valid -0.997107\n",
      "[15869:MainThread](2024-05-08 16:25:11,485) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch5:\n",
      "[15869:MainThread](2024-05-08 16:25:11,486) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:13,878) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:14,652) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.993887, valid -0.997431\n",
      "[15869:MainThread](2024-05-08 16:25:14,656) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch6:\n",
      "[15869:MainThread](2024-05-08 16:25:14,658) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:17,277) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:17,964) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.993017, valid -0.996977\n",
      "[15869:MainThread](2024-05-08 16:25:17,965) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch7:\n",
      "[15869:MainThread](2024-05-08 16:25:17,967) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:19,962) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:20,711) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.992215, valid -0.997251\n",
      "[15869:MainThread](2024-05-08 16:25:20,712) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch8:\n",
      "[15869:MainThread](2024-05-08 16:25:20,713) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:23,272) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:24,029) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.991415, valid -0.997546\n",
      "[15869:MainThread](2024-05-08 16:25:24,031) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch9:\n",
      "[15869:MainThread](2024-05-08 16:25:24,033) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:26,458) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:27,182) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.991064, valid -0.997489\n",
      "[15869:MainThread](2024-05-08 16:25:27,184) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch10:\n",
      "[15869:MainThread](2024-05-08 16:25:27,186) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:29,379) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:30,111) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.990190, valid -0.997820\n",
      "[15869:MainThread](2024-05-08 16:25:30,114) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch11:\n",
      "[15869:MainThread](2024-05-08 16:25:30,115) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:32,218) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:32,913) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.990112, valid -0.998206\n",
      "[15869:MainThread](2024-05-08 16:25:32,915) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch12:\n",
      "[15869:MainThread](2024-05-08 16:25:32,916) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:35,310) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:36,011) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.989369, valid -0.998054\n",
      "[15869:MainThread](2024-05-08 16:25:36,012) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch13:\n",
      "[15869:MainThread](2024-05-08 16:25:36,013) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:38,390) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:39,133) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.987939, valid -0.997689\n",
      "[15869:MainThread](2024-05-08 16:25:39,134) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch14:\n",
      "[15869:MainThread](2024-05-08 16:25:39,135) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:41,477) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:42,262) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.987435, valid -0.998858\n",
      "[15869:MainThread](2024-05-08 16:25:42,263) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch15:\n",
      "[15869:MainThread](2024-05-08 16:25:42,264) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:44,755) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:45,593) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.988117, valid -0.998599\n",
      "[15869:MainThread](2024-05-08 16:25:45,595) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch16:\n",
      "[15869:MainThread](2024-05-08 16:25:45,597) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:47,819) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:48,547) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.985274, valid -0.998995\n",
      "[15869:MainThread](2024-05-08 16:25:48,550) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch17:\n",
      "[15869:MainThread](2024-05-08 16:25:48,551) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:50,482) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:51,238) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.984415, valid -0.998948\n",
      "[15869:MainThread](2024-05-08 16:25:51,240) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch18:\n",
      "[15869:MainThread](2024-05-08 16:25:51,241) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:53,350) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:54,094) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.983747, valid -1.001783\n",
      "[15869:MainThread](2024-05-08 16:25:54,096) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch19:\n",
      "[15869:MainThread](2024-05-08 16:25:54,097) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:56,891) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:25:57,559) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.983191, valid -1.001379\n",
      "[15869:MainThread](2024-05-08 16:25:57,560) INFO - qlib.GATs - [pytorch_gats.py:273] - Epoch20:\n",
      "[15869:MainThread](2024-05-08 16:25:57,561) INFO - qlib.GATs - [pytorch_gats.py:274] - training...\n",
      "[15869:MainThread](2024-05-08 16:25:59,826) INFO - qlib.GATs - [pytorch_gats.py:276] - evaluating...\n",
      "[15869:MainThread](2024-05-08 16:26:00,518) INFO - qlib.GATs - [pytorch_gats.py:279] - train -0.982865, valid -1.000792\n",
      "[15869:MainThread](2024-05-08 16:26:00,519) INFO - qlib.GATs - [pytorch_gats.py:291] - early stop\n",
      "[15869:MainThread](2024-05-08 16:26:00,520) INFO - qlib.GATs - [pytorch_gats.py:294] - best score: -0.996426 @ 0\n",
      "[15869:MainThread](2024-05-08 16:26:00,667) INFO - qlib.workflow - [record_temp.py:198] - Signal record 'pred.pkl' has been saved as the artifact of the Experiment 10\n",
      "[15869:MainThread](2024-05-08 16:26:00,674) INFO - qlib.timer - [log.py:127] - Time cost: 0.000s | waiting `async_log` Done\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'The following are prediction results of the GATs model.'\n",
      "                          score\n",
      "datetime   instrument          \n",
      "2023-11-07 000001.SZ   0.002778\n",
      "           000002.SZ   0.003406\n",
      "           000063.SZ   0.000129\n",
      "           000069.SZ  -0.002013\n",
      "           000100.SZ   0.016816\n"
     ]
    }
   ],
   "source": [
    "#### 2.导入qlib模型数据\n",
    "\n",
    "# 对比模型\n",
    "get_hd = Get_hd()\n",
    "hd = get_hd.hd\n",
    "\n",
    "## 1 lgb\n",
    "if params.if_lgb:\n",
    "    pre = Get_Models_pre(hd)\n",
    "    df_m = pre.get_lgb()\n",
    "    df_m = df_m.reset_index()\n",
    "    df_m['datetime'] = pd.to_datetime(df_m['datetime'])\n",
    "    df_lgb = df_m.pivot(index='instrument', columns='datetime', values='score')\n",
    "\n",
    "## 2 catboost\n",
    "if params.if_catboost:\n",
    "    pre = Get_Models_pre(hd)\n",
    "    df_m = pre.get_catboost()\n",
    "    df_m = df_m.reset_index()\n",
    "    df_m['datetime'] = pd.to_datetime(df_m['datetime'])\n",
    "    df_catboost = df_m.pivot(index='instrument', columns='datetime', values='score')\n",
    "\n",
    "## 3 xgb\n",
    "if params.if_xgb:\n",
    "    pre = Get_Models_pre(hd)\n",
    "    df_m = pre.get_xgb()\n",
    "    df_m = df_m.reset_index()\n",
    "    df_m['datetime'] = pd.to_datetime(df_m['datetime'])\n",
    "    df_xgb = df_m.pivot(index='instrument', columns='datetime', values='score')\n",
    "\n",
    "## 4 tcn\n",
    "if params.if_tcn:\n",
    "    pre = Get_Models_pre(hd)\n",
    "    df_m = pre.get_tcn()\n",
    "    df_m = df_m.reset_index()\n",
    "    df_m['datetime'] = pd.to_datetime(df_m['datetime'])\n",
    "    df_tcn = df_m.pivot(index='instrument', columns='datetime', values='score')\n",
    "\n",
    "## 5 lstm\n",
    "if params.if_lstm:\n",
    "    pre = Get_Models_pre(hd)\n",
    "    df_m = pre.get_lstm()\n",
    "    df_m = df_m.reset_index()\n",
    "    df_m['datetime'] = pd.to_datetime(df_m['datetime'])\n",
    "    df_lstm = df_m.pivot(index='instrument', columns='datetime', values='score')\n",
    "\n",
    "## 6 localformer\n",
    "if params.if_localformer:\n",
    "    pre = Get_Models_pre(hd)\n",
    "    df_m = pre.get_localformer()\n",
    "    df_m = df_m.reset_index()\n",
    "    df_m['datetime'] = pd.to_datetime(df_m['datetime'])\n",
    "    df_localformer = df_m.pivot(index='instrument', columns='datetime', values='score')\n",
    "\n",
    "## 7 gru\n",
    "if params.if_gru:\n",
    "    pre = Get_Models_pre(hd)\n",
    "    df_m = pre.get_gru()\n",
    "    df_m = df_m.reset_index()\n",
    "    df_m['datetime'] = pd.to_datetime(df_m['datetime'])\n",
    "    df_gru = df_m.pivot(index='instrument', columns='datetime', values='score')\n",
    "\n",
    "## 8 transformer\n",
    "if params.if_transformer:\n",
    "    pre = Get_Models_pre(hd)\n",
    "    df_m = pre.get_transformer()\n",
    "    df_m = df_m.reset_index()\n",
    "    df_m['datetime'] = pd.to_datetime(df_m['datetime'])\n",
    "    df_transformer = df_m.pivot(index='instrument', columns='datetime', values='score')\n",
    "    \n",
    "if params.if_alstm:\n",
    "    pre = Get_Models_pre(hd)\n",
    "    df_m = pre.get_alstm()\n",
    "    df_m = df_m.reset_index()\n",
    "    df_m['datetime'] = pd.to_datetime(df_m['datetime'])\n",
    "    df_alstm = df_m.pivot(index='instrument', columns='datetime', values='score')\n",
    "    \n",
    "if params.if_gats:\n",
    "    pre = Get_Models_pre(hd)\n",
    "    df_m = pre.get_gats()\n",
    "    df_m = df_m.reset_index()\n",
    "    df_m['datetime'] = pd.to_datetime(df_m['datetime'])\n",
    "    df_gats = df_m.pivot(index='instrument', columns='datetime', values='score')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def BT_result(df):\n",
    "    if not isinstance(df.index, pd.DatetimeIndex):\n",
    "        df.index = pd.to_datetime(df.index)\n",
    "    gn_data = Get_Data(params,df_close,df)\n",
    "    bt = Backtest(params,gn_data)\n",
    "    result = bt.layer_backtest\n",
    "\n",
    "    return result\n",
    "\n",
    "result_reg = BT_result(df_reg_prob)\n",
    "# result_cla = BT_result(df_cla_prob)\n",
    "## 第一种分类模型回测\n",
    "result_cla = BT_result(df_cla)\n",
    "## 第二种分类模型回测\n",
    "result_cla_prob = BT_result(df_cla_prob)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Performance metrics for first classification model: {'total_return': -0.051194161255129655, 'annualized_return': -0.19805448283761118, 'sharpe_ratio': -1.238217175802899, 'max_drawdown': -0.10948676633771603}\n",
      "Performance metrics for second classification model with probabilities filled: {'total_return': -0.15986876970754327, 'annualized_return': -0.5188749799930681, 'sharpe_ratio': -3.2821293203191018, 'max_drawdown': -0.18138951021849115}\n",
      "The best model is the first model based on Sharpe Ratio.\n"
     ]
    },
    {
     "data": {
      "image/png": "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dF/zMAgYAFtnQe9/gfVlflWykmHtW1CQA67NwbUZuPkZ312bg6MnWMn7OiFE3bNp0yYWL17M9u3bsbe3Jzk5mby8PEuHVasiIiKIiDCmGt6xYwfwzyqNN954Y5WuuXPnTrZt28aYMWMAGD9+POPHj69+sPXIF1/8s2rza6+9xtNPP232NgoKCrCxqfk0rvS9lLZx40bgn4R78uTJwIW/U9Xx5Zdf8vnnn9O/f/+S69Znkgk1VplJkLD9n9lJytJ7BqTHwYHfy96/bxHM7GUsB7//d1j9Gvz+IHx/HXzaH95sC680hXc7wxcjYO6tsPQJWP8u7PoJjq6GpEOQc678eb+1hswzcGyd0d5fzxmDOoUQoopOnjyJt7c39vbGYsfe3t74+fkBEBUVxaBBg+jevTujRo3i5MmTABw+fJjhw4cTHh5Ot27dOHLkCFprHnvsMUJDQ+ncuTNz584FjJ7rwYMHc91119GxY0emTJlC8WJzf/75Jx07dqRbt2788ssvZcZXWFjIo48+SmhoKGFhYRcsXV5sxowZREREEBISwgsvvFCy/cknnyQ4OJiwsDAeffRRwOgxLF5pcuDAgSUxjh07ljNnznDLLbcQGRlJly5dOHLkyAU96X/++SfdunUjPDycYcOGAbB161b69OlD165d6du3LwcPHiQvL4/nn3+euXPnlvSUl+6RjI2NZejQoYSFhTFs2DBOnDgBwLRp03jwwQfp27cvbdq0Yf78C2YTLjm3Y8eOTJs2jfbt2zNlyhRWrFhBv379CAoKYuvWrQCkpqYyceJEwsLC6N27N7t37wYgJSWFkSNHEhISwp133knphf++++67klU877nnHgoLCy/7ezNv3jweeeQRAN5//33atGkDwNGjR0tW6yx+7p588knOnz9Ply5dmDJlSsnretdddxESEsLIkSM5f/78JW1MmzaNe++9l4iICNq3b8/ixYsBo3d3/PjxDB06lGHDhl32XgF27dpFnz59CAoK4vPPPwcgMzOTYcOG0a1bNzp37sxvv/1WcnxBQQFTpkyhU6dOXHfddWRnZ19wLxcr7il+8sknWbduHV26dOHdd9+94BObrKwsbr/9dnr27EnXrl1L2tu7d2/J8x0WFkZMTMwF13755ZdZv349d9xxB4899liFPgU6cuQIo0ePpnv37gwYMIADBw4AcOzYMfr06UPnzp0rtTqr2Wmt681X9+7dtTCTHd9r/YKb1gk7Ln9MYYHW74Vp/cWIC7dnp2o9/07j/E8HaH1qr7E9P1frtONan9ii9d6FWm/6ROu/ntd6wd1azxmn9YcRWr/mb5x38dcrzbX+oJvWs6/Wev4dWi97Rus1/9N64b+0/ny41q+3uvScPx6tsadHCFHz9u3b98+DJU9o/dUY834teeKK7WdkZOjw8HAdFBSkZ8yYoVevXq211jovL0/36dNHnzlzRmut9U8//aSnT5+utda6Z8+e+pdfftFaa33+/HmdlZWl58+fr4cPH64LCgr0qVOndMuWLXViYqJetWqVdnNz03FxcbqwsFD37t1br1u3Tp8/f177+/vrQ4cO6aKiIn399dfrq6+++pL4Pv74Y33ttdfq/Px8rbXWKSkpWmutBw0apCMjIy/YVlBQoAcNGqR37dqlk5OTdfv27XVRUZHWWuu0tDSttdahoaE6Pj7+gm2rVq0qabv0z6XbOXPmjPb399dHjx69oM309PSS2JYvX64nTZqktdZ69uzZ+r777iu5TunHY8eO1XPmzNFaa/3ll1/qCRMmaK21njp1qr7uuut0YWGh3rt3r27btu0lz8exY8e0tbW13r17ty4sLNTdunXT06dP10VFRXrhwoUl17r//vv1iy++qLXWeuXKlTo8PFxrrfUDDzygX3rpJa211osXL9aATkpK0vv27dNjx47VeXl5WmutZ8yYob/++muttdatW7fWSUlJF8Rx8uRJHRERobXW+tprr9URERE6Pj5ez5kzRz/55JOXvEbOzs6X3MOOHTu01lpff/31+ttvv73kXqdOnapHjRqlCwsL9aFDh3SLFi30+fPn9ezZs3WLFi1KXoPL3esLL7ygw8LCdHZ2tk5KStL+/v46ISFB5+fn6/T0dK211klJSbpt27a6qKhIHzt2TAN6/fr1Wmutp0+frt98881L7qX081F8Xxf/3pR+/NRTT5XcX1pamg4KCtKZmZn6/vvv1999953WWuvc3FydnZ19yXNQut3S1yz9+/TCCy+UxDl06FB96NAhrbXWmzdv1kOGDNFaaz1u3LiS1/Ojjz664PUodsHfIhNgmzZjDislJY3VoWXg0gyah1/+GCtr6DUD/nwC4qPAv7tR973oAchOhsFPw4BH/pnhxMYOmrQyvq4kNxMyTkHGSdP3xH8e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",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "## 分类模型比较\n",
    "def calculate_performance_metrics(df):\n",
    "    \"\"\"计算并返回回测性能指标。\"\"\"\n",
    "    # 假设df['净值']是策略的每日净值\n",
    "    total_return = df['净值'].iloc[-1] / df['净值'].iloc[0] - 1\n",
    "    annualized_return = (1 + total_return) ** (252 / len(df)) - 1\n",
    "    daily_returns = df['净值'].pct_change()\n",
    "    sharpe_ratio = (daily_returns.mean() / daily_returns.std()) * (252 ** 0.5)  # 年化夏普比率\n",
    "    max_drawdown = (df['净值'] / df['净值'].cummax() - 1).min()\n",
    "\n",
    "    return {\n",
    "        'total_return': total_return,\n",
    "        'annualized_return': annualized_return,\n",
    "        'sharpe_ratio': sharpe_ratio,\n",
    "        'max_drawdown': max_drawdown\n",
    "    }\n",
    "\n",
    "# 计算每种模型的性能指标\n",
    "metrics_cla = calculate_performance_metrics(result_cla)\n",
    "metrics_cla_prob = calculate_performance_metrics(result_cla_prob)\n",
    "\n",
    "# 输出性能指标进行比较\n",
    "print(\"Performance metrics for first classification model:\", metrics_cla)\n",
    "print(\"Performance metrics for second classification model with probabilities filled:\", metrics_cla_prob)\n",
    "\n",
    "# 根据指标选择最佳模型\n",
    "best_model = 'first' if metrics_cla['sharpe_ratio'] > metrics_cla_prob['sharpe_ratio'] else 'second'\n",
    "print(f\"The best model is the {best_model} model based on Sharpe Ratio.\")\n",
    "\n",
    "# 在一幅图中绘制两个序列\n",
    "plt.figure(figsize=(12, 6))\n",
    "plt.plot(result_cla['净值'], label='First classification model')\n",
    "plt.plot(result_cla_prob['净值'], label='Second classification model with probabilities filled')\n",
    "plt.title('Comparison of two classification models')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "# 将最优模型结果放到result_cla中\n",
    "if best_model == 'second':\n",
    "    result_cla = result_cla_prob\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "if params.if_lgb:\n",
    "    result_lgb = BT_result(df_lgb.T)\n",
    "\n",
    "if params.if_xgb:\n",
    "    result_xgb = BT_result(df_xgb.T)\n",
    "\n",
    "if params.if_catboost:\n",
    "    result_catboost = BT_result(df_catboost.T)\n",
    "\n",
    "if params.if_lstm:\n",
    "    result_lstm = BT_result(df_lstm.T)\n",
    "\n",
    "if params.if_gru:\n",
    "    result_gru = BT_result(df_gru.T)\n",
    "\n",
    "if params.if_tcn:\n",
    "    result_tcn = BT_result(df_tcn.T)\n",
    "\n",
    "if params.if_localformer:\n",
    "    result_localformer = BT_result(df_localformer.T)\n",
    "\n",
    "if params.if_transformer:\n",
    "    result_transformer = BT_result(df_transformer.T)\n",
    "    \n",
    "if params.if_alstm:\n",
    "    result_alstm = BT_result(df_alstm.T)\n",
    "\n",
    "if params.if_gats:\n",
    "    result_gats = BT_result(df_gats.T)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "All data saved to /root/autodl-tmp/Stockformer/Stockformer_run/Stockformer_code/all_models_backtest_data/all_models_2023-11-07_to_2024-01-30.csv\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import os\n",
    "\n",
    "# 定义保存数据的基本路径和文件名\n",
    "base_path = '/root/autodl-tmp/Stockformer/Stockformer_run/Stockformer_code/all_models_backtest_data'\n",
    "filename = f'all_models_{params.start_date}_to_{params.end_date}.csv'\n",
    "file_path = os.path.join(base_path, filename)\n",
    "\n",
    "# 确保基本路径存在，如果不存在则创建\n",
    "os.makedirs(base_path, exist_ok=True)\n",
    "\n",
    "# 假设 hs300['cumulative_return'] 有正确的日期索引，我们将使用这个索引\n",
    "# 如果其他数据集没有日期索引，需要先确保它们有一样的日期索引\n",
    "index = hs300['cumulative_return'].index\n",
    "\n",
    "# 创建一个空的 DataFrame，并设置日期索引\n",
    "combined_data = pd.DataFrame(index=index)\n",
    "\n",
    "# 添加数据到 DataFrame\n",
    "combined_data['HS300_净值'] = hs300['cumulative_return']\n",
    "combined_data['Model_reg_净值'] = result_reg['净值']\n",
    "combined_data['Model_cla_净值'] = result_cla['净值']\n",
    "\n",
    "if params.if_lgb:\n",
    "    combined_data['LGB_净值'] = result_lgb['净值']\n",
    "if params.if_catboost:\n",
    "    combined_data['CatBoost_净值'] = result_catboost['净值']\n",
    "if params.if_xgb:\n",
    "    combined_data['XGB_净值'] = result_xgb['净值']\n",
    "if params.if_lstm:\n",
    "    combined_data['LSTM_净值'] = result_lstm['净值']\n",
    "if params.if_tcn:\n",
    "    combined_data['TCN_净值'] = result_tcn['净值']\n",
    "if params.if_gru:\n",
    "    combined_data['GRU_净值'] = result_gru['净值']\n",
    "if params.if_localformer:\n",
    "    combined_data['Localformer_净值'] = result_localformer['净值']\n",
    "if params.if_transformer:\n",
    "    combined_data['Transformer_净值'] = result_transformer['净值']\n",
    "if params.if_alstm:\n",
    "    combined_data['ALSTM_净值'] = result_alstm['净值']\n",
    "if params.if_gats:\n",
    "    combined_data['GATS_净值'] = result_gats['净值']\n",
    "\n",
    "# 保存 DataFrame 为 CSV 文件，包括索引\n",
    "combined_data.to_csv(file_path, index=True)\n",
    "print(f\"All data saved to {file_path}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 864x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Chart saved to /root/autodl-tmp/Stockformer/Stockformer_run/Visualisation_of_results/backtest_result/2023-11-07_to_2024-01-30_backtest_result.png\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "# 增大图形尺寸\n",
    "plt.figure(figsize=(12, 8))\n",
    "\n",
    "# 使用调色板\n",
    "palette = {\n",
    "    'HS300': 'black',        # 黑色给基准指数\n",
    "    'Model_reg': '#CC2529',  # 红色变暗\n",
    "    'Model_cla': '#396AB1',  # 蓝色变暗\n",
    "    'LGB': '#a69016',        # 棕黄色\n",
    "    'CatBoost': '#FFD700',   # 深黄色\n",
    "    'XGB': '#3E9651',        # 深绿色\n",
    "    'LSTM': '#9467BD',       # 深紫色\n",
    "    'TCN': '#8C564B',        # 棕色\n",
    "    'GRU': '#E377C2',        # 粉色\n",
    "    'Localformer': '#7F7F7F',# 深灰色\n",
    "    'Transformer': '#BCBD22', # 酸橙色\n",
    "    'ALSTM': '#ff9f2b', # 橙色\n",
    "    'GATS': '#17d4d1', # 青色\n",
    "}\n",
    "\n",
    "\n",
    "# 绘制线图\n",
    "sns.lineplot(data=hs300['cumulative_return'], label='HS300', color=palette['HS300'])\n",
    "sns.lineplot(data=result_reg['净值'], label='Model_reg', color=palette['Model_reg'])\n",
    "sns.lineplot(data=result_cla['净值'], label='Model_cla', color=palette['Model_cla'])\n",
    "\n",
    "# 根据条件绘制其他模型\n",
    "if params.if_lgb:\n",
    "    sns.lineplot(data=result_lgb['净值'], label='LGB', color=palette['LGB'])\n",
    "if params.if_catboost:\n",
    "    sns.lineplot(data=result_catboost['净值'], label='CatBoost', color=palette['CatBoost'])\n",
    "if params.if_xgb:\n",
    "    sns.lineplot(data=result_xgb['净值'], label='XGB', color=palette['XGB'])\n",
    "if params.if_lstm:\n",
    "    sns.lineplot(data=result_lstm['净值'], label='LSTM', color=palette['LSTM'])\n",
    "if params.if_tcn:\n",
    "    sns.lineplot(data=result_tcn['净值'], label='TCN', color=palette['TCN'])\n",
    "if params.if_gru:\n",
    "    sns.lineplot(data=result_gru['净值'], label='GRU', color=palette['GRU'])\n",
    "if params.if_localformer:\n",
    "    sns.lineplot(data=result_localformer['净值'], label='Localformer', color=palette['Localformer'])\n",
    "if params.if_transformer:\n",
    "    sns.lineplot(data=result_transformer['净值'], label='Transformer', color=palette['Transformer'])\n",
    "if params.if_alstm:\n",
    "    sns.lineplot(data=result_alstm['净值'], label='ALSTM', color=palette['ALSTM'])\n",
    "if params.if_gats:\n",
    "    sns.lineplot(data=result_gats['净值'], label='GATS', color=palette['GATS'])\n",
    "\n",
    "# 设置标题和标签\n",
    "plt.title('Backtest', fontsize=16, fontweight='bold')\n",
    "plt.xlabel('Date', fontsize=14)\n",
    "plt.ylabel('Value', fontsize=14)\n",
    "\n",
    "# 设置图例位置和大小\n",
    "plt.legend(title='Models', loc='upper left', fontsize=12)\n",
    "\n",
    "# 设置网格\n",
    "plt.grid(True, linestyle='--', linewidth=0.5, alpha=0.7)\n",
    "\n",
    "# 显示图例\n",
    "plt.legend(title='Models', loc='upper left', fontsize=12, ncol=2)\n",
    "\n",
    "# 构建保存路径\n",
    "save_path = f'/root/autodl-tmp/Stockformer/Stockformer_run/Visualisation_of_results/backtest_result/{params.start_date}_to_{params.end_date}_backtest_result.png'\n",
    "\n",
    "# 保存图形\n",
    "plt.savefig(save_path, dpi=300, facecolor='white')  # 使用300 DPI保存图像以保证高清\n",
    "\n",
    "# 显示图形\n",
    "plt.show()\n",
    "\n",
    "# 输出保存路径信息\n",
    "print(f\"Chart saved to {save_path}\")\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "f52f256adf2cc158a51e888fcb9b6688be269c3160efd3d6e246b7ec509c991c"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
